Python 如何使用cv2保存二进制图像(dtype=bool)?

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或灰度格式时,带有布尔值的图像毫无

我正在python中使用opencv,希望保存一个二进制图像(dtype=bool)。如果仅使用cv2.imwrite,则会出现以下错误:

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)