因此,我尝试使用以下代码显示仅黑白的二进制图片:
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).
try cv2.imshow("", y.astype('float32'))
or cv2.imshow("", y.astype('uint8') * 255)
CV_64F
表示 numpy 数组dtype
is float64
(64 位浮点)。
opencv imshow 仅适用于float32
(32 位浮点),其中像素值的范围是0.0-1.0
or uint8
(无符号 8 位)其中范围是0-255
Since y
was a bool
,将其转换为数字表示转换True
to 1
for float32
,这很好,因为 1 是 imshow 范围的最大值
如果你使用uint8
,这意味着您正在尝试显示有价值的像素1/255
(因为最大 imshow 范围为uint8
是 255),几乎不可见,因此您可以乘以 255 以使这些像素达到最大值并显示为亮白色像素
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)