OpenCV ver.4.1.2
numpy ver.1.18.1
pyzber ver.0.1.8
を使用してWindows10にUSBカメラを接続してQRコードを読み込んでみました。
環境:
windows10 64bit home 1909
anoconda3
Python3.7
windows10 64bit home 1909
anoconda3
Python3.7
ライブラリのインストール
pip install opencv-python
pyzberのインストールはこちらに書いています。↓

Python QRコードを読み取の際と出力したCSVファイルが文字化けした際の対処方法【Windows】
環境: windows10 64bit 1803 Anaconda3 Python 3.7 Pycharm2019.3 QRコードの読み取り PythonでQRコードを読み取る際手間取ったので備忘録です。 ここでは、Pythonで作成したQ...
numpyはAnacondaにインストールしてありましたので、割合します。
カメラの接続を確認する
まず、パソコンに標準で付いているカメラかUSBでカメラを接続して確認してみます。
カメラが認識しているか確認してみる。引数には「 -1 0 1」など色々試してみる
import cv2 cap_cam = cv2.VideoCapture(0) print(type(cap_cam))
結果
<class 'cv2.VideoCapture'>
Trueが返ってくれば正常
print(cap_cam.isOpened())
結果
True
カメラが接続できない場合はexitでPythonの接続を閉じます。
if not cap_cam.isOpened(): print("カメラを開けません") exit()
フレームごとにキャプチャ
次にフレーム毎にキャプチャするように設定します。
参考サイト
https://docs.opencv.org/4.1.2/dd/d43/tutorial_py_video_display.html
import cv2 import numpy as np from pyzbar.pyzbar import decode #QRコードのコントラスト調整用の関数 def edit_contrast(image, gamma): """コントラスト調整""" look_up_table = [np.uint8(255.0 / (1 + np.exp(-gamma * (i - 128.) / 255.))) for i in range(256)] result_image = np.array([look_up_table[value] for value in image.flat], dtype=np.uint8) result_image = result_image.reshape(image.shape) return result_image #カメラ認識 cap_cam = cv2.VideoCapture(0) cv2.namedWindow('frame') # カメラが接続できない場合は、exit if not cap_cam.isOpened(): print("カメラを開けません") exit() while True: # フレームごとにキャプチャ ret, frame = cap_cam.read() #フレームが正しく読み取られた場合、retはTrue if not ret: print("フレームは受信できません。終了しています...") break # グレースケール化してコントラストを調整する gray_scale = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) image = edit_contrast(gray_scale, 5) # 結果のフレーム表示 cv2.imshow('frame',gray_scale) if cv2.waitKey(1) & 0xFF == ord('q'): break # 加工した画像からフレームQRコードを取得してデコードする codes = decode(image) if len(codes) > 0: output = codes[0][0].decode('utf-8', 'ignore') print(output) # CSVファイルに書き込み # output_csv = output with open('qr.csv', 'w') as csv_file: writer = csv.writer(csv_file, lineterminator='\n') # 改行コード(\n)を指定しておく writer.writerow([output]) if 'output' != None: #cap_cam.read() cap_cam.release() # すべて完了したらキャプチャーを解放する #cap_cam.release() cv2.destroyAllWindows()
コメント