Python 为什么使用OpenCV保存图像会导致黑色图像?
所以,我想使用python Numpy库创建一个500x500的白色图像,尽管我可以在photoshop中轻松完成。下面的代码有效,图像为白色(因为我使用cv2.imsave功能保存了图像,后来使用windows照片查看器打开了它)。但是当我尝试使用cv2.imshow函数显示它时,会显示一个黑色图像。为什么呢?这是cv2的缺点吗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)
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)
注意,
- 如果图像是8位无符号的,它将按原样显示李>
- 如果图像是16位无符号或32位整数,则像素除以256。那个 是,值范围[0255*256]映射到[0255]李>
- 如果图像是32位浮点,则像素值将乘以255。也就是说,值范围[0,1]被映射到[0255]
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)