zbar 的条码预处理

问题描述 投票:0回答:3

我正在使用树莓派相机从图像中读取条形码,并且在我的应用程序中该物体需要距离相机相对较远。处理前的条形码:Before

Zbar 无法解码该图像中的任何内容,我决定尝试手动编辑图像以使其解码。在条形码的单行之间绘制清晰的白线并更改图像的对比度后,这个结果被 ZBar 解码:After

如何以编程方式从第一个图像转到第二个图像(我现在正在使用 OpenCV 和 python)?

opencv image-processing raspberry-pi barcode zbar
3个回答
1
投票

问题很简单,考虑到最暗的区域是黑色,任何灰色区域都需要转换为白色。尝试计算图像的平均强度。

cv::标量 avgPixelIntensity = cv::mean( 图像 );

使用这个值作为阈值,可以做图像阈值。这会很快。

您还可以尝试 Otsu Thresholding,这是一种自适应阈值技术。这会比上述方法慢,但在图像具有其他伪像(例如阴影)的情况下会提供更好的结果。

请参阅此处:图像阈值 Opencv


1
投票

尝试设置阈值。

首先将其转换为灰度,然后通过反复试验尝试获得 0-255 之间的最佳可能值,并将所选值上方的所有像素标记为白色,下方的所有像素标记为黑色。

如果不起作用,则输入图像需要更清晰。

(不确定 zbar 库是否已经这样做)


0
投票

以下代码可能对您有帮助:

def preprocess_barcode_image(image):
    image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    image = cv2.GaussianBlur(image, (5, 5), 0)
    _, image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    return image
© www.soinside.com 2019 - 2024. All rights reserved.