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()
コメント