cv2.imshow()给出黑屏

Nir*_*bag 2 python arrays numpy cv2

我正在将图像(numpy数组)转换为字符串.然后我将这个字符串转换回原始尺寸的numpy数组.因此,两个numpy数组都是相等的,因为数组相等numpy.array_equals()也会返回True.

当我调用cv2.imshow()原始numpy数组时,它会打印图像.但是当我调用cv2.imshow()新的numpy数组时,我只得到一个黑屏.

为什么会这样?两个numpy数组都相等,所以我应该得到相同的输出吗?

import numpy as np
import cv2

frame = cv2.imread( '/home/nirvan/img_two.png' , cv2.IMREAD_GRAYSCALE)
string = ' '.join(map(str,frame.flatten().tolist()))

frameCopy = frame.copy()

x = frame.shape[0]
y = frame.shape[1]

frame = string.strip()
temp = [ int(t) for t in frame.split(' ')]
temp = np.array(temp)
temp = temp.reshape( (x,y) )

print( np.array_equal(frameCopy , temp) )

#gives black screen
cv2.imshow('l' , np.array(temp) )

#gives proper image
#cv2.imshow('l' , np.array(frameCopy) )

cv2.waitKey()
Run Code Online (Sandbox Code Playgroud)

s-m*_*m-e 9

您的数组,即您的帧是相同的,但数据类型不相同.你的temp数组是类型int64,而imshow期望uint8.以下将修复您的脚本:

cv2.imshow('l' , np.array(temp, dtype = np.uint8 ) )
Run Code Online (Sandbox Code Playgroud)


use*_*598 5

搜索 imshow() 给出黑屏使我看到了这篇文章,但就我而言,我使用的是 Windows 11,实际上我缺少显示图像所需的 waitKey 命令,否则不会出现错误和黑屏

 # Display the resulting frame
        cv2.imshow('Video', frame)
        cv2.waitKey(1)
Run Code Online (Sandbox Code Playgroud)