所以,我想使用python Numpy库创建一个500x500的白色图像,虽然我可以在photoshop中轻松完成。下面的代码是有效的,图像是白色的(因为我使用cv2.imsave函数保存图像,后来我用Windows照片查看器打开它)。但是当我尝试使用cv2.imshow函数显示它时,会显示一个黑色图像。这是为什么?它是cv2的缺点吗?
import cv2
import numpy as np
img = np.arange(500*500*3)
for i in range(500*500*3):
img[i] = 255
img = img.reshape((500, 500, 3))
cv2.imwrite("fff.jpg", img)
cv2.imshow('', img)
答案 0 :(得分:2)
请注意,cv2
模块是C ++ OpenCV包的瘦包装器。这是它的文档,并且签名对于连接它们的python包装函数没有变化。来自documentation -
void cv::imshow (const String &winname, InputArray mat )
在指定的窗口中显示图像。
函数imshow在指定的窗口中显示图像。 [...]
- 如果图像是8位无符号,则按原样显示。
- 如果图像是16位无符号或32位整数,则像素除以256 是,值范围[0,255 * 256]映射到[0,255]。
- 如果图像是32位浮点,则像素值乘以255.即,值范围[0,1]映射到[0,255]。
默认情况下,numpy数组初始化为np.int32
或np.int64
类型(取决于您的计算机)。如果希望显示的数组没有任何更改,则应确保将它们作为8位无符号传递。在你的情况下,像这样 -
cv2.imshow('', img.astype(np.uint8))
或者,在初始化数组时,请执行 -
img = np.arange(..., dtype=np.uint8)