Python 如何使用cv2保存二进制图像(dtype=bool)?
我正在python中使用opencv,希望保存一个二进制图像(dtype=bool)。如果仅使用cv2.imwrite,则会出现以下错误:Python 如何使用cv2保存二进制图像(dtype=bool)?,python,opencv,cv2,Python,Opencv,Cv2,我正在python中使用opencv,希望保存一个二进制图像(dtype=bool)。如果仅使用cv2.imwrite,则会出现以下错误: TypeError: image data type = 0 is not supported 有人能帮我吗?该图像基本上应该在以后用作遮罩 NoOpenCV不需要布尔数组格式的二进制图像OpenCV仅支持np.uint8,np.float32,np.float64,因为OpenCV更像是一个图像处理库,所以当您想到RGB或灰度格式时,带有布尔值的图像毫无
TypeError: image data type = 0 is not supported
有人能帮我吗?该图像基本上应该在以后用作遮罩 No
OpenCV
不需要布尔数组格式的二进制图像OpenCV
仅支持np.uint8
,np.float32
,np.float64
,因为OpenCV更像是一个图像处理库,所以当您想到RGB
或灰度格式时,带有布尔值的图像毫无意义
存储二进制矩阵最紧凑的数据类型是
uchar
或dtype=np.uint8
,因此您需要使用此数据类型,而不是np.bool将二进制图像转换为“uint8”数据类型
试试这个:
>>> binary_image.dtype='uint8'
>>> cv2.imwrite('image.png', binary_image)
请参阅本页,可能会有帮助:
您可以使用以下功能:
cv2.imwrite('mask.png', maskimg * 255)
因此,它隐式地将其转换为整数,其中0表示False
,1表示True
,并将其乘以255,在写入之前生成一个(位)掩码。OpenCV非常宽容,可以写入8位深度的int64
图像(但例如uint16
16位深度的图像)。操作不在原地进行,所以您仍然可以使用<代码> Maskimg < /C> >索引> < P>如果您使用OpenCV,则应该考虑使用HSV格式来对图像进行脱粒。使用cv2.cvtColor()
将BGR图像转换为HSV,然后使用cv2.inRange()
函数设置图像阈值
您需要色调(h)、饱和度(s)和值(v)的上限和下限值。为此,您可以使用或创建自己的,并将其作为参考
此脚本旨在返回实时视频流输入的hsv下限值和上限值,但只需稍作调整,您也可以对图像输入执行相同的操作
使用cv2.imwrite()
保存获得的二进制(类)图像。您也可以使用此二值图像进行遮罩。如果您仍然有任何疑问,您可以参考,它应该会清除大部分疑问。OP要求使用CV2Seems的解决方案也可以简单地作为:`cv2.imwrite(“mask.png”,255*binary_image)`
cv2.imwrite('mask.png', maskimg * 255)