zbar 的条码预处理
Barcode pre-processing for zbar
我正在使用 raspberry pi 相机从图像中读取条形码,并且在我的应用程序中对象需要离相机相对远。处理前的条码:
Zbar 无法解码这张图片的任何内容,我决定尝试手动编辑图片以使其解码。在条形码的单行之间绘制清晰的白线并更改图像的对比度后,ZBar解码结果为:
如何以编程方式从第一张图像转到第二张图像(我现在正在使用 OpenCV 和 python)?
尝试对其进行阈值处理。
首先将其转换为灰度,然后通过反复试验尝试获得 0-255 之间的最佳可能值,并将所有高于所选值的像素标记为白色,所有低于所选值的像素标记为黑色。
如果它不起作用,则输入图像需要更清晰。
(不确定 zbar 库是否已经这样做了)
问题很简单,考虑到最暗的区域是黑色,任何灰色区域都需要转换为白色。尝试计算图像的平均强度。
cv::标量 avgPixelIntensity = cv::mean( 图像 );
用这个值作为阈值,就可以做图像阈值了。这将是相当快的。
您也可以尝试 Otsu Thresholding,这是一种自适应阈值技术。这将比上述方法慢,但在图像具有其他人工制品(例如阴影)的情况下会提供更好的结果。
我正在使用 raspberry pi 相机从图像中读取条形码,并且在我的应用程序中对象需要离相机相对远。处理前的条码:
Zbar 无法解码这张图片的任何内容,我决定尝试手动编辑图片以使其解码。在条形码的单行之间绘制清晰的白线并更改图像的对比度后,ZBar解码结果为:
如何以编程方式从第一张图像转到第二张图像(我现在正在使用 OpenCV 和 python)?
尝试对其进行阈值处理。
首先将其转换为灰度,然后通过反复试验尝试获得 0-255 之间的最佳可能值,并将所有高于所选值的像素标记为白色,所有低于所选值的像素标记为黑色。
如果它不起作用,则输入图像需要更清晰。
(不确定 zbar 库是否已经这样做了)
问题很简单,考虑到最暗的区域是黑色,任何灰色区域都需要转换为白色。尝试计算图像的平均强度。
cv::标量 avgPixelIntensity = cv::mean( 图像 );
用这个值作为阈值,就可以做图像阈值了。这将是相当快的。
您也可以尝试 Otsu Thresholding,这是一种自适应阈值技术。这将比上述方法慢,但在图像具有其他人工制品(例如阴影)的情况下会提供更好的结果。