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

2024-06-16 08:56:31 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我想用pythonnumpy库创建一个500x500的白色图像,尽管我可以在photoshop中轻松地完成。下面的代码是有效的,图像是白色的(因为我用cv2.imsave函数保存了图像,后来我用windows photos viewer打开了它)。但是当我尝试使用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)

Tags: 函数代码图像importimgwindowsnpcv2
1条回答
网友
1楼 · 发布于 2024-06-16 08:56:31

注意到,{{CD1>}模块是围绕C++ OpenCV包的一个薄薄包装。这是它的文档,并且与它们接口的python包装器函数的签名不会改变。从documentation-

void cv::imshow   (const String &winname,
       InputArray     mat 
 )        

Displays an image in the specified window.

The function imshow displays an image in the specified window. [...]

  • If the image is 8-bit unsigned, it is displayed as is.
  • If the image is 16-bit unsigned or 32-bit integer, the pixels are divided by 256. That is, the value range [0,255*256] is mapped to [0,255].
  • If the image is 32-bit floating-point, the pixel values are multiplied by 255. That is, the value range [0,1] is mapped to [0,255].

默认情况下,numpy数组初始化为np.int32np.int64类型(这取决于您的计算机)。如果希望数组不做任何更改地显示,则应确保将它们作为8位无符号传递。对你来说,像这样-

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

或者,在初始化数组时,请执行以下操作-

^{pr2}$

相关问题 更多 >