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

2024-04-27 23:04:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

TypeError: image data type = 0 is not supported

有人能帮我吗?这张照片基本上应该在以后用作遮罩。


Tags: 图像imagedataistype错误二进制not
3条回答

您可以使用:

cv2.imwrite('mask.png', maskimg * 255)

所以这会将它隐式地转换成整数,对于False为0,对于True为1,然后将其乘以255,在写入之前生成(位)掩码。OpenCV是非常宽容的,它可以写8位深度的int64图像(但是例如16位深度的uint16图像)。该操作是而不是就地完成的,因此您仍然可以使用maskimg进行索引等操作

将二进制图像转换为“uint8”数据类型。

试试这个:

>>> binary_image.dtype='uint8'
>>> cv2.imwrite('image.png', binary_image)

OpenCV不需要布尔ndarray格式的二进制图像。OpenCV只支持np.uint8np.float32np.float64,因为OpenCV更像是一个图像操作库,所以当您想到RGB或灰度格式时,具有布尔值的图像是没有意义的。

存储二进制矩阵最紧凑的数据类型是uchardtype=np.uint8,因此需要使用此数据类型而不是np.bool

相关问题 更多 >