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

Vai*_*xit 5 python opencv cv2

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

TypeError: image data type = 0 is not supported
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*ohn 6

您可以使用此:

cv2.imwrite('mask.png', maskimg * 255)
Run Code Online (Sandbox Code Playgroud)

因此,这会将其隐式转换为整数,为给出0,为给出False1 True,然后将其乘以255以在写入之前进行(位)掩码。OpenCV相当宽容,可以写入int648位深度的uint16图像(例如,具有16位深度的图像)。该操作就地完成,因此您仍可以maskimg用于索引等。

  • 似乎工作也很简单: ` cv2.imwrite("mask.png", 255 * binary_image) ` (2认同)

Zda*_*daR 2

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

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