我正在使用树莓派相机从图像中读取条形码,并且在我的应用程序中该物体需要距离相机相对较远。处理前的条形码:
Zbar 无法解码该图像中的任何内容,我决定尝试手动编辑图像以使其解码。在条形码的单行之间绘制清晰的白线并更改图像的对比度后,这个结果被 ZBar 解码:
如何以编程方式从第一个图像转到第二个图像(我现在正在使用 OpenCV 和 python)?
问题很简单,考虑到最暗的区域是黑色,任何灰色区域都需要转换为白色。尝试计算图像的平均强度。
cv::标量 avgPixelIntensity = cv::mean( 图像 );
使用这个值作为阈值,可以做图像阈值。这会很快。
您还可以尝试 Otsu Thresholding,这是一种自适应阈值技术。这会比上述方法慢,但在图像具有其他伪像(例如阴影)的情况下会提供更好的结果。
请参阅此处:图像阈值 Opencv。
尝试设置阈值。
首先将其转换为灰度,然后通过反复试验尝试获得 0-255 之间的最佳可能值,并将所选值上方的所有像素标记为白色,下方的所有像素标记为黑色。
如果不起作用,则输入图像需要更清晰。
(不确定 zbar 库是否已经这样做)
以下代码可能对您有帮助:
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