为什么用OpenCV保存图像会导致黑色图像?

时间:2017-12-19 11:25:47

标签: python numpy opencv cv2

所以,我想使用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)

1 个答案:

答案 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.int32np.int64类型(取决于您的计算机)。如果希望显示的数组没有任何更改,则应确保将它们作为8位无符号传递。在你的情况下,像这样 -

cv2.imshow('', img.astype(np.uint8))

或者,在初始化数组时,请执行 -

img = np.arange(..., dtype=np.uint8)