14

我在 python 中使用 opencv 并想保存二进制图像(dtype = bool)。如果我只是使用 cv2.imwrite 我会收到以下错误:

TypeError: image data type = 0 is not supported

有人可以帮我弄这个吗?该图像基本上应该稍后用作掩码。

4

5 回答 5

20

你可以使用这个:

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

因此,这将其隐式转换为整数,给出 0False和 1 True,并在写入之前将其乘以 255 以制作(位)掩码。OpenCV 非常宽容,可以写入int648 位深度的uint16图像(例如 16 位深度的图像)。该操作就地完成,因此您仍然可以maskimg用于索引等。

于 2018-07-16T05:32:53.310 回答
3

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

尝试这个:

>>> binary_image.dtype='uint8'
>>> cv2.imwrite('image.png', binary_image)
于 2017-06-16T16:47:47.753 回答
2

NoOpenCV不期望布尔 ndarray 格式的二进制图像。OpenCV仅支持np.uint8, np.float32, np.float64, 由于 OpenCV 更像是一个图像处理库,因此当您想到RGB或灰度格式时,具有布尔值的图像毫无意义。

存储二进制矩阵最紧凑的数据类型是ucharor dtype=np.uint8,所以你需要使用这种数据类型而不是np.bool

于 2017-06-16T15:13:04.757 回答
0
ndarray.astype('bool')

查看此页面可能会有所帮助:

https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.ndarray.astype.html

于 2017-10-25T17:12:42.940 回答
0

如果您使用的是 OpenCV,则应考虑使用 hsv 格式对图像进行脱粒。使用函数将 BGR 图像转换为 HSV cv2.cvtColor(),然后使用cv2.inRange()函数对图像进行阈值处理。

您需要 Hue(h)、Saturation(s) 和 Value(v) 的上限和下限值。为此,您可以使用此脚本或使用它作为参考创建自己的脚本。

此脚本旨在返回实时视频流输入的 hsv 下限值和上限值,但稍作调整,您也可以对图像输入执行相同操作。

使用 保存获得的二进制(某种)图像cv2.imwrite(),就可以了。您也可以使用此二进制图像进行遮罩。如果您仍然有任何疑问,您可以参考这个脚本,它应该可以清除大部分问题。

于 2019-07-15T06:48:34.743 回答