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碼的國標。

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