日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Opencv项目实战:03 扫描二维码条形码

發布時間:2023/12/18 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Opencv项目实战:03 扫描二维码条形码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,效果展示

聲明:二維碼會讓圖片違規,我處理了一下,大家看看效果

?

?我們掃描出來的結果會有數字,網址鏈接,英文等。


2,項目準備

(1)安裝pyzbar

使用pip下載,打開控制面板,輸入:

pip install pyzbar

?(2)在此項目下建立兩個.py文件,以及一個.text文件

?打開DataFile.text,輸入以下內容:

111111 111112 111113 111114 111115

或則輸入其他內容,包括英文和數字,注意不要用中文。?

?(3)準備需要的二維碼和條形碼

二維碼生成網站:

在線二維碼生成器 ~ 二維工坊 (2weima.com)https://www.2weima.com/按照你寫的DataFile.text里面的內容來生成二維碼,可以準備幾個其他內容的二維碼,因為我們是在項目拓展中才會使用,亦或者使用生活中的二維碼,比如,書籍,牛奶盒,微信收款碼等等。

條形碼生成網站:

免費在線條形碼生成器 (t-x-m.com)http://t-x-m.com/條形碼無所謂多少。建議大家將準備好的二維碼和條形碼打印到一張紙上,方便掃描,我昨天打印的不見了,所以效果展示我就用手機拍下來掃描的。

3,代碼展示與講解

import cv2 import numpy as np from pyzbar.pyzbar import decodecap = cv2.VideoCapture(0) cap.set(3, 640) cap.set(4, 480)while True:success, img = cap.read()for barcode in decode(img):myData = barcode.data.decode('utf-8')print(myData)pts = np.array([barcode.polygon], np.int32)pts = pts.reshape((-1, 1, 2))cv2.polylines(img, [pts], True, (255, 0, 255), 5)pts2 = barcode.rectcv2.putText(img, myData, (pts2[0], pts2[1]), cv2.FONT_HERSHEY_SIMPLEX,0.9, (255, 0, 255), 2)cv2.imshow('Result', img)k=cv2.waitKey(1) & 0xFFif k==27:break

?本次項目沒什么難點,我們直接講解一下,此項目實現的思路。先看我的分析,再去跟著敲一遍代碼。


  • 首先,在本項目中不管是讀取圖像,還是讀取攝像頭都能實現,那么我們在這里是實現攝像頭的實時掃描。讀取網絡攝像頭(在效果展示中,我采用的外用攝像頭),在cap.set()函數里面,用‘3’代表的是寬,用‘4’代表的是高的設置,使其窗口大小合適。
  • 其次是在while True中,success接受的是布爾值,檢測是否讀取成功,用img讀取每一幀的圖像。采取pyzbar包中的decode函數,對img進行解碼,并將解碼后的內容打印在控制臺中,大家也可以嘗試將解碼的內容打印出來,看看有些什么東西。(包括barcode.rect和barcode.data)
  • 除此之外,在Opencv中繪制包圍住二維碼的方法有很多,比如繪制矩形、繪制多邊形;如果是選擇矩形框框,識別時二維碼存在的傾斜角度會導致添加的框框不能跟著傾斜,而這不是我們想要的效果,因此我們需要選用繪制多邊形。具體如下:

第一行使用numpy庫中array函數,得到一個四點數據矩陣。其中barcode.polygon作用是從輪廓中提取polygon點,作為頂點(請看下方圖一);np.int32則是對于數據的類型約束。
第二行的reshape((-1,1,2))函數,-1表示行有先,主要功能是將原有的數據形狀轉換為opencv中常用的形狀:(x,1,y),便于使用(請看下方圖二)。如將(4,2)轉換為(4,1,2)。
第三行就是繪畫多邊形的過程,使用cv.ploylines函數,繪制了一個閉合、紫色、寬度為五的四邊形。注意此次的布爾值指的是是否為閉合圖型。
?

圖一:

圖二:

?

  • ?緊接著,是放置文本框,那么我們當然不需要它移動,我們希望的是它可以固定在某一點。那么在此處我們采取了rect的方法,得到如下圖所表示:

  • ?最后,就是展示窗口,在此處如果想關閉窗口,點擊Esc鍵即可,27即是Esc鍵的Ascll碼。

4,項目拓展

項目拓展描述:

公司的員工使用工作牌掃描二維碼開門的想法的實現,根據我們之前準備好的DataFile.text,以及生成的二維碼,如果掃描的是DataFile.text里的內容就用綠色框和文本表示已經授權;否則,用紅色框和文本表示未授權。

我們來看看它的效果是怎么樣的。如下

?

?

項目實現的效果非常好,下面的代碼我也不再多做講解了,快去做起來吧!

import cv2 import numpy as np from pyzbar.pyzbar import decodecap = cv2.VideoCapture(1) cap.set(3, 640) cap.set(4, 480)with open('DataFile.text') as f:myDataList = f.read().splitlines()while True:success, img = cap.read()for barcode in decode(img):myData = barcode.data.decode('utf-8')print(myData)if myData in myDataList:myOutput = 'Authorized'myColor = (0, 255, 0)else:myOutput = 'Un-Authorized'myColor = (0, 0, 255)pts = np.array([barcode.polygon], np.int32)pts = pts.reshape((-1, 1, 2))cv2.polylines(img, [pts], True, myColor, 5)pts2 = barcode.rectcv2.putText(img, myOutput, (pts2[0], pts2[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.9, myColor, 2)cv2.imshow('Result', img)k = cv2.waitKey(1) & 0xFFif k == 27:break

5,項目總結與評價

本次項目中,由于我也不是很很了解reshape函數,還是查了資料才了解,對于二維碼的掃描都是相當不錯的,但對于條形碼的掃描,在生活中的條形碼沒能成功,可能與攝像頭有關吧。

希望你在本項目中玩的開心!!!

?

6,項目素材

可惜,二維碼圖片可能會違規,大家就自己在網站制作吧,需用自取

?barcode:

總結

以上是生活随笔為你收集整理的Opencv项目实战:03 扫描二维码条形码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。