python - cv2.imshow() 给出黑屏

标签 python arrays numpy opencv

我正在将图像(numpy 数组)转换为字符串。然后我将这个字符串转换回原始维度的 numpy 数组。因此,这两个 numpy 数组是相等的——事实上 numpy.array_equals() 也返回 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 ) )

关于python - cv2.imshow() 给出黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47867440/

相关文章:

python - 在 numpy 数组的交替行和列中插入值

Jaccard 的 Python 包函数集合之间的相似性?

python - 带有 Django 的 Gunicorn 给出了静态文件的问题

arrays - 将重复/重复模式识别为来自父数组的子数组

arrays - Bash:将字符串拆分为数组

python - 为什么我无法使用 scipy.optimize.curve_fit 将 sigmoid 函数拟合到此数据?

python - 将行/列标题添加到 NumPy 数组

python - seaborn gridplot/subplots 在同一行 ID 的第一列上显示一个变量,在第二列上显示另一个变量

python - 如何组合指数? (x**a)**b => x**(a*b)?

构建线段树时的 C++ 段错误