亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

詳解利用python識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強

瀏覽:2日期:2022-07-05 11:13:38

前言

這周和大家分享如何用python識別圖像里的條碼。用到的庫可以是zbar。希望西瓜6辛苦碼的代碼不要被盜了。(zxing的話,我一直沒有裝好,等裝好之后再寫一篇)

具體步驟

前期準備

用opencv去讀取圖片,用pip進行安裝。

pip install opencv-python

所用到的圖片就是這個

詳解利用python識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強

使用pyzbar

windows的安裝方法是

pip install pyzbar

而mac的話,最好用brew來安裝。(有可能直接就好,也有可能很麻煩)裝好之后就是讀取圖片,識別條碼。代碼如下

import cv2import pyzbar.pyzbar as pyzbarimage=cv2.imread('/Users/phoenix/Downloads/barcode.png')gray = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)texts = pyzbar.decode(gray)for text in texts: tt = text.data.decode('utf-8')print(tt)

結果如圖:

詳解利用python識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強

特殊情況處理(條碼圖片矯正和增強)

只以pyzbar舉例

條碼是顛倒的是否會影響識別?

不影響,單純顛倒180度和90度是不會影響識別的。我們把上一個圖的顛倒180度,用顛倒后的圖試一下

詳解利用python識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強

import cv2import pyzbar.pyzbar as pyzbarimport numpy as npimage=cv2.imread('/Users/phoenix/Downloads/barcode_180.png')gray = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)texts = pyzbar.decode(gray)print(texts)if texts==[]: print('未識別成功')else: for text in texts: tt = text.data.decode('utf-8') print('識別成功') print(tt)

結果如圖

詳解利用python識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強

90度的話也是同樣可以成功的。但是其它角度就會GG。

條碼是傾斜的是否會影響識別?

會的,但這種還比較好處理。如圖

詳解利用python識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強

這張圖用上面的代碼就會

詳解利用python識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強

解決的思路是把這個圖片旋轉回來,至于如何判斷轉多少度,可以通過opencv來處理。通過膨脹和腐蝕將其變為如圖。

詳解利用python識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強

接著再用cv2.minAreaRect函數,這個函數會返回如下,

詳解利用python識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強

里面的第三個-45就是我們需要的角度。

綜合起來的實現代碼,我就放在下面了。(我自己寫的,如果有幫到你,快點關注和贊)

import cv2import pyzbar.pyzbar as pyzbarimport numpy as npdef barcode(gray): texts = pyzbar.decode(gray) if texts == []: angle = barcode_angle(gray) if angle < -45: angle = -90 - angle texts = bar(gray, angle) if texts == []: gray = np.uint8(np.clip((1.1 * gray + 10), 0, 255)) angle = barcode_angle(gray) #西瓜6寫的,轉載需聲明 if angle < -45: angle = -90 - angle texts = bar(gray, angle) return textsdef bar(image, angle): gray = image #西瓜6寫的,轉載需聲明 bar = rotate_bound(gray, 0 - angle) roi = cv2.cvtColor(bar, cv2.COLOR_BGR2RGB) texts = pyzbar.decode(roi) return textsdef barcode_angle(image): gray = image #西瓜6寫的,轉載需聲明 ret, binary = cv2.threshold(gray, 220, 255, cv2.THRESH_BINARY_INV) kernel = np.ones((8, 8), np.uint8) dilation = cv2.dilate(binary, kernel, iterations=1) erosion = cv2.erode(dilation, kernel, iterations=1) erosion = cv2.erode(erosion, kernel, iterations=1) erosion = cv2.erode(erosion, kernel, iterations=1) contours, hierarchy = cv2.findContours( erosion, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) if len(contours) == 0: rect = [0, 0, 0] else: rect = cv2.minAreaRect(contours[0]) return rect[2]def rotate_bound(image, angle): (h, w) = image.shape[:2] (cX, cY) = (w // 2, h // 2) M = cv2.getRotationMatrix2D((cX, cY), -angle, 1.0) cos = np.abs(M[0, 0]) sin = np.abs(M[0, 1]) #西瓜6寫的,轉載需聲明 nW = int((h * sin) + (w * cos)) nH = int((h * cos) + (w * sin)) M[0, 2] += (nW / 2) - cX M[1, 2] += (nH / 2) - cY return cv2.warpAffine(image, M, (nW, nH))image=cv2.imread('/Users/phoenix/Downloads/barcode_455.png')gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)texts = barcode(gray)print(texts)if texts==[]: print('未識別成功')else: for text in texts: tt = text.data.decode('utf-8') print('識別成功') print(tt)

條碼是模糊的是否會影響識別?

會的,處理方法就是傳統的調對比度,銳化。。。。不過這個只能解決部分部分,至于有的條碼,微信可以掃,支付寶可以掃,但是我們識別不了,這個也不能怪庫不好,這部分該放棄就放棄吧。

結束語

如果你想用python來解決圖像里的條碼識別問題,這篇文章肯定是可以幫到你的。到此這篇關于詳解利用python識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強的文章就介紹到這了,更多相關python識別圖片條碼內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 成人国产精品高清在线观看 | 视频自拍网 | 国产精品国产三级国产a | 黄色片免费的 | 成人h免费观看视频 | 成人国产精品视频频 | 欧美久色| 自拍 亚洲 欧美 | 欧洲成品大片在线播放 | 亚洲国产精品va在线观看麻豆 | 亚洲精品国产一区二区三 | bbixx在线观看 | 国产xvideoscom | 国产111111在线观看 | 色免费看 | 国产菲菲视频在线观看 | 国产九色在线播放 | 96精品免费视频大全 | 国产一区高清 | 扒开双腿猛进入jk校视频 | 成人在线午夜 | 小明看看成人免费视频 | 日本黄大片影院一区二区 | 看黄色一级大片 | 国产αv | 911精品国产亚洲日本美国韩国 | 成人亚洲国产精品久久 | www视频在线免费观看 | 天天天色 | 欧美一级欧美三级在线观看 | 午夜亚洲精品久久久久 | 欧美成人精品一区二三区在线观看 | a毛片基地免费全部香蕉 | 久久久久琪琪精品色 | 久久综合在线 | 香港三级理论在线观看网站 | 国产成人啪精品午夜在线观看 | 欧美亚洲另类久久综合 | 国产高清日韩 | 91在线视频免费播放 | 青青青在线日本免费视频 |