OpenMV图像处理的方法4

扫码识别

QR码

QR码是二维条码的一种,快速响应码,常用于产品标识。
优点:信息容量大,印刷面积小,兼容汉字与假名,抗污损,360度可读,结构可附加。
QR 码的最小元素(黑色或白色方块)被称为“模块”。
组成:QR 码是由黑色和白色模块、位置探测图案、时间图案、包含纠错级别和掩码编号的格式信息、数据区域以及纠错代码(Reed-Solomon 码)组合而成。
http://cli.im/ 可以用草料二维码生成你想要的内容。

image.find_qrcodes([roi])

1.查找 roi 内的所有二维码并返回一个 image.qrcode 对象的列表。

2.为使这一方法成功运行,图像上二维码需比较平展。

通过使用 sensor.set_windowing 函数在镜头中心放大、 image.lens_corr 函数来消解镜头的桶形畸变或通过更换视野较为狭小的镜头, 可得到一个不受镜头畸变影响的更为平展的二维码。如需要,也可使用无畸变镜头。

img.lens_corr(1.8) # strength of 1.8 is good for the 2.8mm lens.

3.roi 是一个用以复制的矩形的感兴趣区域(x, y, w, h)。如果未指定,ROI即整幅图像的图像矩形。 操作范围仅限于 roi 区域内的像素。

4.不支持压缩图像和bayer图像。

5.此方法在OpenMV Cam M4 上不可用。

例程:

import sensor, image
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA) # can be QVGA on M7...
sensor.skip_frames(30)
sensor.set_auto_gain(False) # must turn this off to prevent image washout...
while(True):
    img = sensor.snapshot()
    img.lens_corr(1.8) # strength of 1.8 is good for the 2.8mm lens.
    for code in img.find_qrcodes():
        print(code)

注:but,我的输出没有qrcodes,也就是对应的网址。
预估是晚上有反光,毕竟是二维的。
在这里插入图片描述

条形码

条形码需要640*80以上的分辨率,一般都是取其最有效的payload,也就是二维码下面对应的数字。
在这里插入图片描述

image.find_barcodes([roi])

1.查找 roi 内所有一维条形码并返回一个 image.barcode 对象列表。

2.为了获得最佳效果,使用长640、宽40/80/160窗口
垂直程度越低,运行速度越快。由于条形码是线性一维图像,所以只需在一个方向上有较高分辨率, 而在另一方向上只需较低分辨率。

注意:该函数进行水平和垂直扫描,所以可使用宽40/80/160、长480的窗口。
最后,一定调整镜头,这样条形码会定位在焦距产生最清晰图像的地方。模糊条码无法被解码。

3.该函数支持所有一维条形码:

image.EAN2
image.EAN5
image.EAN8
image.UPCE
image.ISBN10
image.UPCA
image.EAN13
image.ISBN13
image.I25
image.DATABAR (RSS-14)
image.DATABAR_EXP (RSS-Expanded)
image.CODABAR
image.CODE39
image.PDF417
image.CODE93
image.CODE128
4.roi 是一个用以复制的矩形的感兴趣区域(x, y, w, h)。如果未指定,ROI即整幅图像的图像矩形。操作范围仅限于 roi 区域内的像素。

5.不支持压缩图像和bayer图像。

6.此方法在OpenMV Cam M4 上不可用。

7.barcode.corners()
返回一个由该对象的**四个角组成的四个元组(x,y)**的列表。四个角通常是按照从左上角开始沿顺时针顺序返回的。

barcode.rect()
返回一个矩形元组(x, y, w, h),用于如数据矩阵的边界框的 image.draw_rectangle 等其他的 image 方法。

barcode.x()
返回条形码的边界框的x座标(int)。索引 [0]

barcode.y()
返回条形码的边界框的y座标(int)。索引 [1]

barcode.w()
返回条形码的边界框的w宽度(int)。索引 [2]

barcode.h()
返回条形码的边界框的h高度(int)。索引 [3]

barcode.payload()
返回条形码的有效载荷的字符串。例:数量。索引 [4]

barcode.type()
返回条形码的列举类型 (int)。索引 [5]

image.EAN2
image.EAN5
image.EAN8
image.UPCE
image.ISBN10
image.UPCA
image.EAN13
image.ISBN13
image.I25
image.DATABAR
image.DATABAR_EXP
image.CODABAR
image.CODE39
image.PDF417 - 未来启用 (e.g. 现在还不能正常使用).
image.CODE93
image.CODE128

barcode.rotation()
返回以弧度计的条形码的旋度(浮点数)。索引 [6]

barcode.quality()
返回条形码在图像中被检测到的次数(int)。索引 [7]

扫描条形码时,每一条新的扫描线都能解码相同的条形码。每次进行这一过程,条形码的值都会随之增加。

Data Matrix

注:此例程也未实现,和QR码一个问题。

Data Matrix二维条码是一种矩阵式二维条码。有国际标准。其尺寸可以依需求印成不同大小,但采用的错误纠正码应与尺寸配合,由于其演算法较为容易,且尺寸较有弹性,故一般以ECC200较为普遍。

Data Matrix(ECC200)码结构

Data Matrix 码的数据区域四周为 L 形框(称为“对准图案”)和点线(称为“时钟图案”)。
读取器将捕获这些图案,通过图像处理技术确定代码的位置。因此,可从任何方向上读取 Data Matrix 码。
在这里插入图片描述
当模块数目超过 24 × 24 时,代码将分成区块,每侧不会超过 24 个模块。此结构可防止代码失真。共有 24 种代码尺寸,范围为从 10 × 10 模块到 144 × 144 模块(对于矩形,共有六种尺寸)。

当某个代码的模块数目超过 26 × 26(对于数据,模块数目超过 24 × 24)时,它会划分为区块,如下所示,每侧不超过 24 个模块。

此结构可防止代码失真。
在这里插入图片描述

比较几种二维码

可根据需求度使用。
在这里插入图片描述
这里需要先补充一下PDF417二维条码,这是一种堆叠式二维条码,目前应用最为广泛(虽然我没怎么见过)。PDF意思是“便携数据文件”。组成条码的每一个条码字符由4个条和4个空共17个模块构成,故称为PDF417条码。

PDF417二维条码优点

1.信息容量大 ,除可以表示字母、数字、ASCII字符外,还能表达二进制数。

2.错误纠正能力 ,一维条码通常具有校验功能以防止错读,一旦条码发生污损将被拒读。
而二维条码不仅能防止错误,而且能纠正错误,即使条码部分损坏,也能将正确的信息还原出来。

3.印制要求不高 ,普通打印设备均可打印,传真件也能阅读。

4.尺寸可调,以适应不同的打印空间
码制公开已形成国际标准,我国也已制定了417码的国标。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章