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)
您的数组,即您的帧是相同的,但数据类型不相同.你的temp数组是类型int64,而imshow期望uint8.以下将修复您的脚本:
cv2.imshow('l' , np.array(temp, dtype = np.uint8 ) )
Run Code Online (Sandbox Code Playgroud)
搜索 imshow() 给出黑屏使我看到了这篇文章,但就我而言,我使用的是 Windows 11,实际上我缺少显示图像所需的 waitKey 命令,否则不会出现错误和黑屏
# Display the resulting frame
cv2.imshow('Video', frame)
cv2.waitKey(1)
Run Code Online (Sandbox Code Playgroud)