我一直试图操纵一个非常简单的8 x 8图像(变量"abc"
)的颜色(BGR值),但当我尝试用反转颜色查看新图像时(变量{{1}我得到的只是一张黑色照片。有人可以帮帮我吗?
我甚至尝试在更改代码后检查两个数组是否完全匹配,以便尝试一次一个像素地复制图像,条件等于"target"
但图片仍为黑色。
我已经发布了以下代码:
True
答案 0 :(得分:2)
我想指出cv2.imshow
的文档:http://docs.opencv.org/modules/highgui/doc/user_interface.html#imshow
阅读说明中有关您要显示的图像类型的内容:
[0,255*256]
映射到[0,255]
。[0,1]
映射到[0,255]
。你的情况是第二点。你要做的是输入图像很可能是无符号的8位整数开始。因为您创建了类型为int
的输出图像(实际上是int32
),这相当于32位整数类型的图像,所以发生的是所有值都被除以256.对于8位无符号整数类型,所有值都在0到255之间,因此除以256会使所有像素黑色(即[0,255] / 256 --> [0,0]
假定整数除法)。
要解决此问题,您需要为输出正确创建正确的图像类型。在您的情况下,我将假设您的输入数据类型为uint8
,根据我看到的情况,这是最有意义的,因此只需更改target
以便{{1}是} dtype
:
uint8
您可以通过切片非常有效地完成您想要的内容。
因此,target = np.empty(shape=(x1, y1, 3), dtype=np.uint8)
可以非常简单地成为以下内容,而不使用target
循环或临时列表来复制空间坐标元组:
for
额外的好处是target = abc[:,:,[1,2,0]]
将保持target
所采用的相同数据类型。阅读abc
索引和切片:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html