最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年11月17日 08:33:45   作者:西瓜6  
這篇文章主要介紹了詳解利用python識(shí)別圖片中的條碼(pyzbar)及條碼圖片矯正和增強(qiáng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

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

具體步驟

 前期準(zhǔn)備

用opencv去讀取圖片,用pip進(jìn)行安裝。

pip install opencv-python

所用到的圖片就是這個(gè)

西瓜6的barcode

使用pyzbar

windows的安裝方法是

pip install pyzbar

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

import cv2
import pyzbar.pyzbar as pyzbar

image=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)

結(jié)果如圖:

在這里插入圖片描述

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

只以pyzbar舉例

條碼是顛倒的是否會(huì)影響識(shí)別?

不影響,單純顛倒180度和90度是不會(huì)影響識(shí)別的。
我們把上一個(gè)圖的顛倒180度,用顛倒后的圖試一下

barcode_180

import cv2
import pyzbar.pyzbar as pyzbar
import numpy as np

image=cv2.imread("/Users/phoenix/Downloads/barcode_180.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
texts = pyzbar.decode(gray)
print(texts)
if texts==[]:
 print("未識(shí)別成功")
else:
 for text in texts:
  tt = text.data.decode("utf-8")
 print("識(shí)別成功")
 print(tt)

結(jié)果如圖

在這里插入圖片描述

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

條碼是傾斜的是否會(huì)影響識(shí)別?

會(huì)的,但這種還比較好處理。
如圖

在這里插入圖片描述

這張圖用上面的代碼就會(huì)

在這里插入圖片描述

解決的思路是把這個(gè)圖片旋轉(zhuǎn)回來,至于如何判斷轉(zhuǎn)多少度,可以通過opencv來處理。通過膨脹和腐蝕將其變?yōu)槿鐖D。

在這里插入圖片描述

接著再用cv2.minAreaRect函數(shù),這個(gè)函數(shù)會(huì)返回如下,

在這里插入圖片描述

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

綜合起來的實(shí)現(xiàn)代碼,我就放在下面了。(我自己寫的,如果有幫到你,快點(diǎn)關(guān)注和贊)

import cv2
import pyzbar.pyzbar as pyzbar
import numpy as np

def 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寫的,轉(zhuǎn)載需聲明
    if angle < -45:
      angle = -90 - angle
    texts = bar(gray, angle)
  return texts

def bar(image, angle):
  gray = image
  #西瓜6寫的,轉(zhuǎn)載需聲明
  bar = rotate_bound(gray, 0 - angle)
  roi = cv2.cvtColor(bar, cv2.COLOR_BGR2RGB)
  texts = pyzbar.decode(roi)
  return texts


def barcode_angle(image):
  gray = image
  #西瓜6寫的,轉(zhuǎn)載需聲明
  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寫的,轉(zhuǎn)載需聲明
  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("未識(shí)別成功")
else:
  for text in texts:
    tt = text.data.decode("utf-8")
  print("識(shí)別成功")
  print(tt)

條碼是模糊的是否會(huì)影響識(shí)別?

會(huì)的,處理方法就是傳統(tǒng)的調(diào)對(duì)比度,銳化。。。。
不過這個(gè)只能解決部分部分,至于有的條碼,微信可以掃,支付寶可以掃,但是我們識(shí)別不了,這個(gè)也不能怪庫不好,這部分該放棄就放棄吧。

結(jié)束語

如果你想用python來解決圖像里的條碼識(shí)別問題,這篇文章肯定是可以幫到你的。到此這篇關(guān)于詳解利用python識(shí)別圖片中的條碼(pyzbar)及條碼圖片矯正和增強(qiáng)的文章就介紹到這了,更多相關(guān)python識(shí)別圖片條碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python模塊域名dnspython解析

    Python模塊域名dnspython解析

    本文主要介紹了Python模塊域名dnspython解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Python實(shí)現(xiàn)數(shù)值交換的四種方式

    Python實(shí)現(xiàn)數(shù)值交換的四種方式

    本文介紹了Python中四種實(shí)現(xiàn)數(shù)值交換的方法,包括使用臨時(shí)變量、元組解包、列表和異或運(yùn)算,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-01-01
  • 在Gnumeric下使用Python腳本操作表格的教程

    在Gnumeric下使用Python腳本操作表格的教程

    這篇文章主要介紹了在Gnumeric下使用Python腳本操作表格的教程,本文來自于IBM官方網(wǎng)站,需要的朋友可以參考下
    2015-04-04
  • Python利用PyExecJS庫執(zhí)行JS函數(shù)的案例分析

    Python利用PyExecJS庫執(zhí)行JS函數(shù)的案例分析

    這篇文章主要介紹了Python利用PyExecJS庫執(zhí)行JS函數(shù),本文通過案例分析給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python中元組解構(gòu)的技巧詳解

    Python中元組解構(gòu)的技巧詳解

    在Python中,元組(tuple)是一種常用的數(shù)據(jù)結(jié)構(gòu),元組的解構(gòu)是一項(xiàng)強(qiáng)大的特性,快速、方便地將元組中的值分配給多個(gè)變量,下面我們就來學(xué)習(xí)一下Python中元組解構(gòu)的技巧吧
    2024-01-01
  • Ubuntu16安裝Python3.9的實(shí)現(xiàn)步驟

    Ubuntu16安裝Python3.9的實(shí)現(xiàn)步驟

    這篇文章主要介紹了Ubuntu16安裝Python3.9的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • tensorflow實(shí)現(xiàn)殘差網(wǎng)絡(luò)方式(mnist數(shù)據(jù)集)

    tensorflow實(shí)現(xiàn)殘差網(wǎng)絡(luò)方式(mnist數(shù)據(jù)集)

    這篇文章主要介紹了tensorflow實(shí)現(xiàn)殘差網(wǎng)絡(luò)方式(mnist數(shù)據(jù)集),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 淺談python中的錯(cuò)誤與異常

    淺談python中的錯(cuò)誤與異常

    寫Python代碼的小伙伴不可避免地會(huì)遇到代碼執(zhí)行錯(cuò)誤和異常,這次就來詳細(xì)的總結(jié)一下python中的錯(cuò)誤和異常
    2021-06-06
  • Python?colorama?彩色打印實(shí)現(xiàn)代碼

    Python?colorama?彩色打印實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python?colorama?彩色打印實(shí)現(xiàn)代碼,將介紹的類為Back,?它實(shí)現(xiàn)了與?Fore?類相同的九個(gè)關(guān)鍵字:BLACK、RED、GREEN、YELLOW、BLUE、MAGENTA、CYAN、WHITE、RESET,感興趣的朋友一起看看吧
    2022-04-04
  • 提升Python運(yùn)行速度的5個(gè)小技巧

    提升Python運(yùn)行速度的5個(gè)小技巧

    這篇文章主要為大家介紹了Python提升運(yùn)行速度的幾個(gè)小技巧,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12

最新評(píng)論

兴和县| 通山县| 夹江县| 米林县| 镇坪县| 湘潭县| 桂平市| 惠州市| 沈阳市| 陆丰市| 木里| 兴隆县| 伊宁市| 舒兰市| 海安县| 临洮县| 四子王旗| 榆树市| 师宗县| 兴海县| 沈丘县| 梅河口市| 绩溪县| 虹口区| 江西省| 杨浦区| 大方县| 安岳县| 登封市| 凌源市| 濮阳市| 南宁市| 都兰县| 神池县| 曲阜市| 合阳县| 桃江县| 旬邑县| 黄大仙区| 江源县| 武平县|