从图像中选择数据矩阵并解码

Selecting the Data Matrix from a Image and Decoding it

我附上了图片。我尝试使用下面的代码,它为大多数图像输出了正确的值。但是解码需要很长时间。

import cv2
from pylibdmtx.pylibdmtx import decode
import ctypes  
from PIL import Image
decode(Image.open("1591106831_festo.jpg"))

我相信如果我可以 select 仅包含数据矩阵的图像的特定部分并将其输入到 pylibdmtx 库,它可能会更准确和更快。

但目前我无法弄清楚如何 select 带有数据矩阵的图像部分。你能帮帮我吗?谢谢

附加 DataMatrix 的预期输出是 (91)4608

下面简单地使用cv2 and pylibdmtx怎么样

import cv2
from pylibdmtx.pylibdmtx import decode

image = cv2.imread("1591106831_festo.jpg")
h, w  = image.shape[:2]
decdd = decode((image[:, :, :1].tobytes(), w, h))
print(decdd)
# [Decoded(data=b'(91)4608', rect=Rect(left=650, top=522, width=-82, height=86))]

这可能比您目前手头的更快,因为我们 1) 提供 decode 不可猜测的参数和 2)image[:, :, :1],这意味着只处理第一个 BGR 层,即蓝色层,显然足以用于条形码。


为了便于比较,decode(Image.open("1591106831_festo.jpg"))returns

[Decoded(data=b'(91)4608', rect=Rect(left=650, top=522, width=-82, height=86))]

即完全相同的推论。


你可以做的是限制你想要获得的条形码数量,使用 max_count 参数,

>>> decode(Image.open("1591106831_festo.jpg"), max_count=1)
[Decoded(data=b'(91)4608', rect=Rect(left=522, top=629, width=86, height=82))]