cv2.imshow() 黑屏
cv2.imshow() giving black screen
我正在将图像(numpy 数组)转换为字符串。然后我将这个字符串转换回原始维度的 numpy 数组。因此,两个 numpy 数组都是相等的——实际上 numpy.array_equals()
也 returns True
数组是相等的。
当我在原始 numpy 数组上调用 cv2.imshow()
时,它会打印图像。但是当我在新的 numpy 数组上调用 cv2.imshow()
时,我只得到一个黑屏。
为什么会这样?两个 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()
你的数组,即你的帧是相等的,但数据类型不同。您的 temp
数组是 int64
类型,而 imshow
需要 uint8
。以下内容将修复您的脚本:
cv2.imshow('l' , np.array(temp, dtype = np.uint8 ) )
我正在将图像(numpy 数组)转换为字符串。然后我将这个字符串转换回原始维度的 numpy 数组。因此,两个 numpy 数组都是相等的——实际上 numpy.array_equals()
也 returns True
数组是相等的。
当我在原始 numpy 数组上调用 cv2.imshow()
时,它会打印图像。但是当我在新的 numpy 数组上调用 cv2.imshow()
时,我只得到一个黑屏。
为什么会这样?两个 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()
你的数组,即你的帧是相等的,但数据类型不同。您的 temp
数组是 int64
类型,而 imshow
需要 uint8
。以下内容将修复您的脚本:
cv2.imshow('l' , np.array(temp, dtype = np.uint8 ) )