2024-04-27 23:04:45 发布
网友
我在python中使用opencv,希望保存一个二进制图像(dtype=bool)。如果我只是使用cv2.imwrite,就会出现以下错误:
TypeError: image data type = 0 is not supported
有人能帮我吗?这张照片基本上应该在以后用作遮罩。
您可以使用:
cv2.imwrite('mask.png', maskimg * 255)
所以这会将它隐式地转换成整数,对于False为0,对于True为1,然后将其乘以255,在写入之前生成(位)掩码。OpenCV是非常宽容的,它可以写8位深度的int64图像(但是例如16位深度的uint16图像)。该操作是而不是就地完成的,因此您仍然可以使用maskimg进行索引等操作
False
True
int64
uint16
maskimg
将二进制图像转换为“uint8”数据类型。
试试这个:
>>> binary_image.dtype='uint8' >>> cv2.imwrite('image.png', binary_image)
不OpenCV不需要布尔ndarray格式的二进制图像。OpenCV只支持np.uint8、np.float32、np.float64,因为OpenCV更像是一个图像操作库,所以当您想到RGB或灰度格式时,具有布尔值的图像是没有意义的。
OpenCV
np.uint8
np.float32
np.float64
RGB
存储二进制矩阵最紧凑的数据类型是uchar或dtype=np.uint8,因此需要使用此数据类型而不是np.bool。
uchar
dtype=np.uint8
np.bool
您可以使用:
所以这会将它隐式地转换成整数,对于
False
为0,对于True
为1,然后将其乘以255,在写入之前生成(位)掩码。OpenCV是非常宽容的,它可以写8位深度的int64
图像(但是例如16位深度的uint16
图像)。该操作是而不是就地完成的,因此您仍然可以使用maskimg
进行索引等操作将二进制图像转换为“uint8”数据类型。
试试这个:
不
OpenCV
不需要布尔ndarray格式的二进制图像。OpenCV
只支持np.uint8
、np.float32
、np.float64
,因为OpenCV更像是一个图像操作库,所以当您想到RGB
或灰度格式时,具有布尔值的图像是没有意义的。存储二进制矩阵最紧凑的数据类型是
uchar
或dtype=np.uint8
,因此需要使用此数据类型而不是np.bool
。相关问题 更多 >
编程相关推荐