我正在准备激光雕刻的图像。这是一个具有黑白,0和255的1位位图,我将其保存为:
import cv2
...
cv2.imwrite("filepath.bmp", bitmap_image)
激光切割器将其视为多级位图,并带有Engrave only support 2-bit bitmap
(原文如此)抱怨。我可以在软件内部将其转换为2值位图,但是此额外的处理步骤会干扰我想要的结果。
This page for OpenCV 3 beta建议将其保存为0-1位图是不可能的:
使用此功能只能保存8位(或PNG,JPEG 2000和TIFF情况下为16位无符号(CV_16U))单通道或3通道图像。如果格式,深度或通道顺序不同,请在保存之前使用
Mat::convertTo()
和cvtColor()
进行转换。或者,使用通用的FileStorage I / O功能将图像保存为XML或YAML格式。
但是this page for OpenCV 3.1提到了2级PNG文件:
IMWRITE_PNG_BILEVEL
:二进制级别PNG,0或1,默认为0。
在Python中使用该选项会返回错误:
Traceback (most recent call last):
...
cv2.imwrite("filepath.png", bitmap_image, cv2.IMWRITE_PNG_BILEVEL)
SystemError: <built-in function imwrite> returned NULL without setting an error
如何在OpenCV和Python中保存0-1位图?