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

Python 为什么使用OpenCV保存图像会导致黑色图像?,python,numpy,opencv,cv2,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)

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

注意, CV2< /Cult>模块是C++ OpenCV包周围的一个薄薄包装。这是它的文档,接口它们的python包装函数的签名不会改变。从—

在指定的窗口中显示图像

imshow函数在指定窗口中显示图像。[……]

  • 如果图像是8位无符号的,它将按原样显示
  • 如果图像是16位无符号或32位整数,则像素除以256。那个 是,值范围[0255*256]映射到[0255]
  • 如果图像是32位浮点,则像素值将乘以255。也就是说,值范围[0,1]被映射到[0255]
默认情况下,numpy数组初始化为
np.int32
np.int64
类型(取决于您的机器)。如果希望数组不作任何更改地显示,则应确保以8位无符号形式传递它们。对你来说,像这样-

cv2.imshow('', img.astype(np.uint8))
或者,在初始化数组时,请执行以下操作-

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

您可能需要使用
int8
datatype-
img.astype(np.uint8)
显示数组,明白了。我修改了第三行并添加了参数“dtype=np.uint8”,它成功了。很难找到它。我花了好几个小时才找到它。我可以想象这是一个反复出现的问题,所以我找到了文档并在一个答案中链接到它。
img = np.arange(..., dtype=np.uint8)