gpt4 book ai didi

python - 将范围内的 RGB 像素值转换为连续的数字

转载 作者:太空宇宙 更新时间:2023-11-03 23:10:33 24 4
gpt4 key购买 nike

伙计们,我是 python 的新手,我被困在这个问题上。如果你能帮助我,我将不胜感激。

我有一张图像,每个像素都有多种颜色。它们都表示一个数字。

enter image description here

图像是使用 0 到 15625 像素的范围构建的。从 0 到 15625 范围内的每个像素都有不同的颜色,上面的图像是使用它构建的。

image range (它很大,所以你可能需要下载它才能看到图像)

我想要做的是将 RGB 值从范围(例如第一个像素值 (5,5,5))转换为 1,将范围内的下一个像素值转换为 2,依此类推。因此,上图中的每个像素都可以对应一个值。

它类似于这个问题,但我不认为它做了我想做的事情。 How to Convert all pixel values of an image to a certain range -python

这是我用来创建范围的代码

#!/usr/local/bin/python3
from PIL import Image
import numpy as np

# Create array to hold output image
result=np.zeros([1,25*25*25,3],dtype=np.uint8)

#change the values above i.e. 51*51*51 done by (upperbound-lowerbound)/step i.e (255-0)/5
j=0
for r in range(5,255,10):
for g in range(5,255,10):
for b in range(5,255,10):
result[0,j]= (r,g,b)
j+=1

# Convert output array to image and save
im=Image.fromarray(result)
im.save("perfect1.png")

这是查找范围内每个像素的 RGB 值的代码

from PIL import Image

i = Image.open('perfect1.png')
pixels = i.load() # this is not a list, nor is it list()'able
width, height = i.size

all_pixels = []
for x in range(width):
for y in range(height):
cpixel = pixels[x, y]
all_pixels.append(cpixel)

print all_pixels

这是用于创建没有额外像素值的子数组的代码,因为图像中的每个“像素”值都包含许多像素。a = 图像值数组

rows_mask = np.insert(np.diff(a[:, 0]).astype(np.bool), 0, True)
columns_mask = np.insert(np.diff(a[0]).astype(np.bool), 0, True)
b = a[np.ix_(rows_mask, columns_mask)]

最佳答案

这是一些想法。

让我们加载你的图片

import numpy as np
from scipy.misc import imread

img = imread("img.png")[..., :3] # drop alpha channel
lut = imread("lut.png").squeeze() # squeeze 1D first axis

print(img.shape)
print(lut.shape)

哪些输出

(589, 612, 3)
(15625, 3)

现在假设我们要查找图像中的第一个像素

print(img[0, 0])
[245 245 95]

可以在查找表中找到所有具有相同值的像素(axis=1逐行比较)

np.all(img[0, 0] == lut, axis=1)

它为所有像素提供掩码,匹配时为 True,否则为 False

现在您可以使用 np.where

将其转换为索引列表(在您的情况下我们可以假设长度为 1)
idx = np.where(np.all(img[0, 0] == lut, axis=1))

并且,假设每个像素都有一个您将获得的唯一映射

(array([15609]),)

现在这个方法真的很慢而且效率低下,你必须对图像的每个像素重复它。可能有一些方法可以加快它的速度,但目前我还没有看到它,让我们看看是否有其他人有更好的输入。

关于python - 将范围内的 RGB 像素值转换为连续的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50907540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com