因此,我尝试使用以下代码显示只有黑色和白色的二进制图片:
import cv2
import numpy as np
x_img = cv2.imread("lenac.tif")
x_img_g = cv2.cvtColor(x_img, cv2.COLOR_BGR2GRAY)
y = x_img_g > 128
cv2.imshow("", y*1.0)
cv2.waitKey(0)
cv2.destroyAllWindows()
但是我收到了这个错误:
>Traceback (most recent call last):
File "ex5.py", line 11, in <module>
cv2.imshow("", y*1.0)
cv2.error: OpenCV(4.0.0) c:\projects\opencv-
python\opencv\modules\imgproc\src\color.hpp:261: error: (-2:Unspecified
error) >in function '__cdecl cv::CvtHelper<struct
cv::Set<1,-1,-1>,struct cv::Set<3,4,-1>,struct
cv::Set<0,2,5>,2>::CvtHelper(const class cv::_InputArray &,const class
cv::_OutputArray &,int)'
>Unsupported depth of input image:
> 'VDepth::contains(depth)'
> where
> 'depth' is 6 (CV_64F).
最佳答案
试试 cv2.imshow("", y.astype('float32'))
或 cv2.imshow("", y.astype('uint8') * 255)
CV_64F
表示 numpy 数组 dtype
是 float64
(64 位 float )。
opencv imshow 仅适用于 float32
(32 位浮点),其中像素值的范围是 0.0-1.0
或 uint8
(无符号 8 位),范围为 0-255
由于 y
是一个 bool
,将其转换为数字意味着将 True
转换为 1
对于 float32
,这很好,因为 1 是 imshow 范围的最大值
如果您使用 uint8
,这意味着您正在尝试显示值 1/255
的像素(因为 uint8
的最大 imshow 范围> 是 255),几乎看不到,因此您可以乘以 255 使这些像素达到最大并显示为亮白色像素
关于python:不支持 OpenCV 图像深度 (CV_64F),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55128386/