伙计们我是python的新手,而且我坚持这个。如果你能帮助我,真的很感激。
我的图像中每个像素都有多种颜色。它们都表示一个数字。
使用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)]
答案 0 :(得分:0)
这里有一些想法。
让我们加载您的图片
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
。
现在您可以将其转换为索引列表(在您的情况下,我们可以假设其长度为1
)与np.where
idx = np.where(np.all(img[0, 0] == lut, axis=1))
并且,假设每个像素都有一个唯一的映射,你将得到
(array([15609]),)
现在这种方法非常慢且效率低,你必须为图像的每个像素重复它。可能有某种方法可以加快速度,但目前我还没有看到它,让我们看看其他人是否有更好的投入。