[Python] webカメラの情報を取得して表示する方法
PythonでWebカメラの情報を取得して表示するには、主にOpenCVライブラリを使用します。
OpenCVのcv2.VideoCapture()
を使ってカメラにアクセスし、フレームを取得して表示します。
cv2.VideoCapture(0)
でデフォルトのカメラに接続し、read()メソッド
でフレームを取得します。
取得したフレームはcv2.imshow()
で表示可能です。
ループ内でフレームを連続して取得し、cv2.waitKey()
でキー入力を待つことで、リアルタイムの映像を表示できます。
OpenCVを使ったWebカメラの基本操作
OpenCVとは
OpenCV(Open Source Computer Vision Library)は、コンピュータビジョンや画像処理のためのオープンソースライブラリです。
Pythonを含む多くのプログラミング言語で利用可能で、画像や映像の解析、処理、認識などを行うための豊富な機能を提供しています。
特に、リアルタイムの画像処理に強みを持っています。
OpenCVのインストール方法
OpenCVをPythonで使用するためには、まずライブラリをインストールする必要があります。
以下のコマンドを使用して、pipを使ってインストールできます。
pip install opencv-python
Webカメラにアクセスする方法
Webカメラにアクセスするためには、cv2.VideoCapture()
を使用します。
この関数にカメラのインデックス番号を渡すことで、特定のカメラに接続できます。
通常、内蔵カメラは0、外部カメラは1などのインデックスを持ちます。
import cv2
# カメラにアクセス
camera = cv2.VideoCapture(0) # 0は内蔵カメラを指定
フレームを取得する方法
Webカメラからフレームを取得するには、read()メソッド
を使用します。
このメソッドは、フレームが正常に取得できたかどうかを示すブール値と、取得したフレームを返します。
import cv2
camera = cv2.VideoCapture(0)
# フレームを取得
ret, frame = camera.read()
if ret:
print("フレームを取得しました。")
else:
print("フレームの取得に失敗しました。")
取得したフレームを表示する方法
取得したフレームを表示するには、cv2.imshow()
を使用します。
この関数にウィンドウ名とフレームを渡すことで、映像を表示できます。
import cv2
camera = cv2.VideoCapture(0)
ret, frame = camera.read()
if ret:
cv2.imshow("Webカメラ映像", frame) # ウィンドウ名とフレームを表示
cv2.waitKey(0) # 任意のキーが押されるまで待機
cv2.destroyAllWindows() # ウィンドウを閉じる
Webカメラの解像度を設定する方法
Webカメラの解像度を設定するには、set()メソッド
を使用します。
第一引数にcv2.CAP_PROP_FRAME_WIDTH
またはcv2.CAP_PROP_FRAME_HEIGHT
を指定し、第二引数に設定したい解像度を指定します。
import cv2
camera = cv2.VideoCapture(0)
# 解像度を設定
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) # 幅を1280に設定
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) # 高さを720に設定
Webカメラの接続を解除する方法
Webカメラの接続を解除するには、release()メソッド
を使用します。
このメソッドを呼び出すことで、カメラリソースを解放します。
import cv2
camera = cv2.VideoCapture(0)
# カメラの接続を解除
camera.release()
これで、OpenCVを使ったWebカメラの基本操作についての解説が完了しました。
次のステップでは、リアルタイムで映像を表示する方法について詳しく見ていきます。
Webカメラの映像をリアルタイムで表示する
cv2.VideoCapture()の使い方
cv2.VideoCapture()
は、Webカメラやビデオファイルから映像を取得するための関数です。
引数にはカメラのインデックス番号やファイルパスを指定します。
インデックス番号は、内蔵カメラが0、外部カメラが1などのように、接続されているカメラの順番に基づいています。
以下は、内蔵カメラにアクセスする例です。
import cv2
# 内蔵カメラにアクセス
camera = cv2.VideoCapture(0)
cv2.imshow()で映像を表示する
cv2.imshow()
は、指定したウィンドウに画像や映像を表示するための関数です。
第一引数にはウィンドウ名、第二引数には表示したいフレームを渡します。
以下のコードは、フレームを表示する基本的な例です。
import cv2
camera = cv2.VideoCapture(0)
ret, frame = camera.read()
if ret:
cv2.imshow("Webカメラ映像", frame) # ウィンドウ名とフレームを表示
cv2.waitKey(0) # 任意のキーが押されるまで待機
cv2.destroyAllWindows() # ウィンドウを閉じる
cv2.waitKey()でキー入力を待つ方法
cv2.waitKey()
は、指定したミリ秒間、キー入力を待つ関数です。
引数に0を指定すると、無限に待機します。
この関数を使用することで、ウィンドウがすぐに閉じるのを防ぎ、ユーザーが映像を確認できるようにします。
以下は、無限に待機する例です。
import cv2
camera = cv2.VideoCapture(0)
ret, frame = camera.read()
if ret:
cv2.imshow("Webカメラ映像", frame) # 映像を表示
cv2.waitKey(0) # 無限に待機
cv2.destroyAllWindows() # ウィンドウを閉じる
ループ処理で映像を連続表示する方法
Webカメラの映像をリアルタイムで表示するためには、ループ処理を使用します。
while
ループを使って、フレームを継続的に取得し、表示し続けることができます。
以下は、ループ処理を用いた例です。
import cv2
camera = cv2.VideoCapture(0)
while True:
ret, frame = camera.read() # フレームを取得
if not ret:
break # フレーム取得に失敗した場合はループを終了
cv2.imshow("Webカメラ映像", frame) # 映像を表示
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーが押されたら終了
break
camera.release() # カメラの接続を解除
cv2.destroyAllWindows() # ウィンドウを閉じる
映像表示を終了する方法
映像表示を終了するには、cv2.VideoCapture()
で取得したカメラをrelease()メソッド
で解放し、cv2.destroyAllWindows()
で表示しているウィンドウを閉じます。
上記のループ処理の例でも、q
キーが押されたときにこれらのメソッドを呼び出して、適切に終了しています。
camera.release() # カメラの接続を解除
cv2.destroyAllWindows() # ウィンドウを閉じる
これで、Webカメラの映像をリアルタイムで表示する方法についての解説が完了しました。
次のステップでは、映像を保存する方法について詳しく見ていきます。
Webカメラの映像を保存する方法
フレームを画像として保存する方法
Webカメラから取得したフレームを画像として保存するには、cv2.imwrite()関数
を使用します。
この関数に保存したいファイル名とフレームを渡すことで、指定した形式で画像を保存できます。
以下は、フレームをJPEG形式で保存する例です。
import cv2
camera = cv2.VideoCapture(0)
ret, frame = camera.read()
if ret:
cv2.imwrite("saved_frame.jpg", frame) # フレームを画像として保存
print("フレームを画像として保存しました。")
camera.release()
動画として保存する方法
Webカメラの映像を動画として保存するには、cv2.VideoWriter()
を使用します。
この関数には、出力ファイル名、コーデック、フレームレート、フレームサイズを指定します。
以下は、Webカメラの映像をAVI形式で保存する例です。
import cv2
camera = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID') # コーデックの指定
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480)) # 動画ファイルの作成
while True:
ret, frame = camera.read()
if not ret:
break
out.write(frame) # フレームを動画に書き込む
cv2.imshow("Webカメラ映像", frame)
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera.release()
out.release() # 動画ファイルを閉じる
cv2.destroyAllWindows()
保存する際のファイル形式の指定方法
保存する際のファイル形式は、ファイル名の拡張子によって決まります。
一般的な形式には以下のようなものがあります。
ファイル形式 | 拡張子 | 説明 |
---|---|---|
JPEG | .jpg | 静止画像の一般的な形式 |
PNG | .png | 可逆圧縮の静止画像形式 |
AVI | .avi | 動画ファイル形式 |
MP4 | .mp4 | 高圧縮の動画ファイル形式 |
保存する際のフレームレートの設定方法
動画を保存する際のフレームレートは、cv2.VideoWriter()
の引数で指定します。
フレームレートは、1秒間に何フレームを保存するかを示し、一般的には30fpsや60fpsが使用されます。
以下は、フレームレートを30fpsに設定する例です。
import cv2
camera = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 30.0, (640, 480)) # フレームレートを30fpsに設定
while True:
ret, frame = camera.read()
if not ret:
break
out.write(frame) # フレームを動画に書き込む
cv2.imshow("Webカメラ映像", frame)
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera.release()
out.release() # 動画ファイルを閉じる
cv2.destroyAllWindows()
これで、Webカメラの映像を保存する方法についての解説が完了しました。
次のステップでは、映像にフィルターを適用する方法について詳しく見ていきます。
Webカメラの映像にフィルターを適用する
グレースケール変換の方法
グレースケール変換は、カラー画像を白黒の画像に変換する処理です。
OpenCVでは、cv2.cvtColor()関数
を使用して簡単に実行できます。
以下は、Webカメラの映像をグレースケールに変換する例です。
import cv2
camera = cv2.VideoCapture(0)
while True:
ret, frame = camera.read()
if not ret:
break
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # グレースケール変換
cv2.imshow("グレースケール映像", gray_frame) # グレースケール映像を表示
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera.release()
cv2.destroyAllWindows()
エッジ検出の方法
エッジ検出は、画像内の輪郭や境界を強調する処理です。
Cannyエッジ検出器を使用することで、簡単にエッジを検出できます。
以下は、Webカメラの映像にエッジ検出を適用する例です。
import cv2
camera = cv2.VideoCapture(0)
while True:
ret, frame = camera.read()
if not ret:
break
edges = cv2.Canny(frame, 100, 200) # Cannyエッジ検出
cv2.imshow("エッジ検出映像", edges) # エッジ検出映像を表示
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera.release()
cv2.destroyAllWindows()
ぼかしフィルターの適用方法
ぼかしフィルターは、画像のノイズを減少させたり、滑らかに見せたりするために使用されます。
OpenCVでは、cv2.GaussianBlur()関数
を使用してガウシアンぼかしを適用できます。
以下は、Webカメラの映像にぼかしフィルターを適用する例です。
import cv2
camera = cv2.VideoCapture(0)
while True:
ret, frame = camera.read()
if not ret:
break
blurred_frame = cv2.GaussianBlur(frame, (15, 15), 0) # ガウシアンぼかし
cv2.imshow("ぼかしフィルター映像", blurred_frame) # ぼかし映像を表示
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera.release()
cv2.destroyAllWindows()
カラーフィルターの適用方法
カラーフィルターは、特定の色を強調したり、他の色を除去したりするために使用されます。
以下は、特定の色(例えば、赤色)を検出するカラーフィルターの例です。
import cv2
import numpy as np
camera = cv2.VideoCapture(0)
while True:
ret, frame = camera.read()
if not ret:
break
# BGRからHSVに変換
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 赤色の範囲を定義
lower_red = np.array([0, 100, 100])
upper_red = np.array([10, 255, 255])
mask = cv2.inRange(hsv_frame, lower_red, upper_red) # 赤色のマスクを作成
# マスクを使って元のフレームにフィルターを適用
filtered_frame = cv2.bitwise_and(frame, frame, mask=mask)
cv2.imshow("カラーフィルター映像", filtered_frame) # フィルター映像を表示
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera.release()
cv2.destroyAllWindows()
これで、Webカメラの映像にフィルターを適用する方法についての解説が完了しました。
次のステップでは、複数のWebカメラを扱う方法について詳しく見ていきます。
複数のWebカメラを扱う方法
複数のカメラにアクセスする方法
複数のWebカメラにアクセスするには、cv2.VideoCapture()
をそれぞれのカメラインデックスを指定して複数回呼び出します。
以下は、2つのカメラにアクセスする例です。
import cv2
# カメラ1とカメラ2にアクセス
camera1 = cv2.VideoCapture(0) # 内蔵カメラ
camera2 = cv2.VideoCapture(1) # 外部カメラ
カメラのインデックス番号の指定方法
カメラのインデックス番号は、接続されているカメラの順番に基づいています。
通常、内蔵カメラは0、外部カメラは1、2、…と続きます。
接続されているカメラのインデックスを確認するには、カメラを一つずつ接続して、どの番号で認識されるかを確認する必要があります。
複数の映像を同時に表示する方法
複数のカメラから取得した映像を同時に表示するには、cv2.imshow()
を使ってそれぞれのカメラからのフレームを表示します。
以下は、2つのカメラの映像を同時に表示する例です。
import cv2
camera1 = cv2.VideoCapture(0) # 内蔵カメラ
camera2 = cv2.VideoCapture(1) # 外部カメラ
while True:
ret1, frame1 = camera1.read() # カメラ1からフレームを取得
ret2, frame2 = camera2.read() # カメラ2からフレームを取得
if not ret1 or not ret2:
break
cv2.imshow("カメラ1映像", frame1) # カメラ1の映像を表示
cv2.imshow("カメラ2映像", frame2) # カメラ2の映像を表示
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera1.release()
camera2.release()
cv2.destroyAllWindows()
複数の映像を保存する方法
複数のカメラからの映像をそれぞれ別の動画ファイルとして保存するには、cv2.VideoWriter()
を使って各カメラの映像を保存します。
以下は、2つのカメラの映像をそれぞれAVI形式で保存する例です。
import cv2
camera1 = cv2.VideoCapture(0) # 内蔵カメラ
camera2 = cv2.VideoCapture(1) # 外部カメラ
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out1 = cv2.VideoWriter('output_camera1.avi', fourcc, 20.0, (640, 480)) # カメラ1用
out2 = cv2.VideoWriter('output_camera2.avi', fourcc, 20.0, (640, 480)) # カメラ2用
while True:
ret1, frame1 = camera1.read() # カメラ1からフレームを取得
ret2, frame2 = camera2.read() # カメラ2からフレームを取得
if not ret1 or not ret2:
break
out1.write(frame1) # カメラ1のフレームを保存
out2.write(frame2) # カメラ2のフレームを保存
cv2.imshow("カメラ1映像", frame1) # カメラ1の映像を表示
cv2.imshow("カメラ2映像", frame2) # カメラ2の映像を表示
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera1.release()
camera2.release()
out1.release() # カメラ1の動画ファイルを閉じる
out2.release() # カメラ2の動画ファイルを閉じる
cv2.destroyAllWindows()
これで、複数のWebカメラを扱う方法についての解説が完了しました。
次のステップでは、顔認識を行う方法について詳しく見ていきます。
応用例:顔認識を行う
顔認識ライブラリのインストール方法
顔認識を行うためには、OpenCVに加えて、顔認識のためのHaar Cascade分類器を使用します。
OpenCVには、顔認識に必要なHaar Cascade分類器が含まれています。
まず、OpenCVをインストールしていない場合は、以下のコマンドでインストールします。
pip install opencv-python
次に、Haar Cascade分類器のXMLファイルをダウンロードします。
OpenCVのインストール時に自動的に含まれている場合もありますが、以下のURLから直接ダウンロードできます。
顔認識の基本的な流れ
顔認識の基本的な流れは以下の通りです。
- Webカメラから映像を取得する。
- 取得した映像をグレースケールに変換する。
- Haar Cascade分類器を使用して顔を検出する。
- 検出した顔に枠を描画する。
- 結果を表示する。
Webカメラ映像で顔を検出する方法
Webカメラからの映像を取得し、顔を検出するための基本的なコードは以下の通りです。
import cv2
# Haar Cascade分類器の読み込み
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
camera = cv2.VideoCapture(0)
while True:
ret, frame = camera.read()
if not ret:
break
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # グレースケール変換
faces = face_cascade.detectMultiScale(gray_frame, scaleFactor=1.1, minNeighbors=5) # 顔検出
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) # 検出した顔に枠を描画
cv2.imshow("顔認識映像", frame) # 映像を表示
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera.release()
cv2.destroyAllWindows()
検出した顔に枠を描画する方法
上記のコード内で、cv2.rectangle()関数
を使用して、検出した顔に青色の枠を描画しています。
(x, y)
は顔の左上の座標、(x + w, y + h)
は顔の右下の座標を指定します。
枠の色はBGR形式で指定し、太さは最後の引数で指定します。
顔認識結果を保存する方法
顔認識の結果を保存するには、検出した顔のフレームを画像として保存することができます。
以下は、検出した顔を画像として保存する例です。
import cv2
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
camera = cv2.VideoCapture(0)
face_count = 0 # 保存する顔のカウント
while True:
ret, frame = camera.read()
if not ret:
break
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray_frame, scaleFactor=1.1, minNeighbors=5)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) # 検出した顔に枠を描画
face_count += 1
face_image = frame[y:y + h, x:x + w] # 検出した顔の部分を切り出し
cv2.imwrite(f"face_{face_count}.jpg", face_image) # 顔を画像として保存
cv2.imshow("顔認識映像", frame)
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera.release()
cv2.destroyAllWindows()
このコードでは、検出した顔をface_count
のカウントに基づいてface_1.jpg
, face_2.jpg
のように保存しています。
これにより、複数の顔を検出した場合でも、それぞれの顔を個別の画像ファイルとして保存できます。
これで、顔認識を行う方法についての解説が完了しました。
次のステップでは、動体検知を行う方法について詳しく見ていきます。
応用例:動体検知を行う
動体検知の基本的な仕組み
動体検知は、映像内の動きを検出する技術です。
基本的な仕組みは、連続するフレーム間の差分を計算し、変化があった部分を検出することにあります。
動体検知のプロセスは以下の通りです。
- Webカメラから映像を取得する。
- 取得した映像をグレースケールに変換する。
- 前のフレームと現在のフレームの差分を計算する。
- 差分が一定の閾値を超えた部分を動体として検出する。
- 検出した動体に枠を描画する。
Webカメラ映像で動体を検出する方法
動体検知を行うための基本的なコードは以下の通りです。
ここでは、前のフレームと現在のフレームの差分を計算し、動体を検出します。
import cv2
camera = cv2.VideoCapture(0)
ret, frame1 = camera.read() # 最初のフレームを取得
ret, frame2 = camera.read() # 次のフレームを取得
while True:
# フレームの差分を計算
diff = cv2.absdiff(frame1, frame2) # フレーム1とフレーム2の絶対差分
gray_diff = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY) # グレースケール変換
_, thresh = cv2.threshold(gray_diff, 30, 255, cv2.THRESH_BINARY) # 二値化
# 輪郭を検出
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
if cv2.contourArea(contour) > 500: # 面積が500以上の輪郭を検出
(x, y, w, h) = cv2.boundingRect(contour) # 輪郭の外接矩形を取得
cv2.rectangle(frame2, (x, y), (x + w, y + h), (0, 255, 0), 2) # 動体に枠を描画
cv2.imshow("動体検知映像", frame2) # 映像を表示
frame1 = frame2 # フレームを更新
ret, frame2 = camera.read() # 次のフレームを取得
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera.release()
cv2.destroyAllWindows()
動体検知の感度を調整する方法
動体検知の感度は、輪郭の面積や差分の閾値を調整することで変更できます。
例えば、cv2.contourArea(contour) > 500
の部分を変更することで、検出する動体の大きさを調整できます。
面積の値を小さくすると、より小さな動体も検出されるようになります。
また、cv2.threshold()
の閾値を変更することで、動体検知の感度を調整できます。
# 面積の閾値を調整
if cv2.contourArea(contour) > 300: # 面積が300以上の輪郭を検出
動体検知結果を保存する方法
動体検知の結果を保存するには、検出した動体のフレームを画像として保存することができます。
以下は、動体を検出した際にそのフレームを保存する例です。
import cv2
import datetime
camera = cv2.VideoCapture(0)
ret, frame1 = camera.read()
ret, frame2 = camera.read()
while True:
diff = cv2.absdiff(frame1, frame2)
gray_diff = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray_diff, 30, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
if cv2.contourArea(contour) > 500:
(x, y, w, h) = cv2.boundingRect(contour)
cv2.rectangle(frame2, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 動体を保存
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
cv2.imwrite(f"motion_{timestamp}.jpg", frame2) # 動体を画像として保存
cv2.imshow("動体検知映像", frame2)
frame1 = frame2
ret, frame2 = camera.read()
if cv2.waitKey(1) & 0xFF == ord('q'):
break
camera.release()
cv2.destroyAllWindows()
このコードでは、動体を検出した際に、現在の日時をファイル名に含めて画像を保存しています。
これにより、いつ動体が検出されたかを簡単に確認できます。
これで、動体検知を行う方法についての解説が完了しました。
次のステップでは、QRコードを読み取る方法について詳しく見ていきます。
応用例:QRコードを読み取る
QRコードライブラリのインストール方法
QRコードを読み取るためには、opencv-python
に加えて、QRコードのデコードを行うためのライブラリであるpyzbar
をインストールする必要があります。
以下のコマンドを使用して、pyzbar
をインストールします。
pip install pyzbar
Webカメラ映像でQRコードを検出する方法
Webカメラからの映像を取得し、QRコードを検出するための基本的なコードは以下の通りです。
ここでは、pyzbar
を使用してQRコードをデコードします。
import cv2
from pyzbar.pyzbar import decode
camera = cv2.VideoCapture(0)
while True:
ret, frame = camera.read()
if not ret:
break
# QRコードをデコード
decoded_objects = decode(frame)
# 検出したQRコードに枠を描画
for obj in decoded_objects:
(x, y, w, h) = obj.rect
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) # QRコードに枠を描画
cv2.imshow("QRコード検出映像", frame) # 映像を表示
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'キーで終了
break
camera.release()
cv2.destroyAllWindows()
検出したQRコードの内容を表示する方法
QRコードをデコードした後、その内容を表示することができます。
以下のコードでは、検出したQRコードの内容をコンソールに表示します。
import cv2
from pyzbar.pyzbar import decode
camera = cv2.VideoCapture(0)
while True:
ret, frame = camera.read()
if not ret:
break
decoded_objects = decode(frame)
for obj in decoded_objects:
(x, y, w, h) = obj.rect
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) # QRコードに枠を描画
qr_data = obj.data.decode('utf-8') # QRコードの内容をデコード
print("QRコードの内容:", qr_data) # 内容を表示
cv2.imshow("QRコード検出映像", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
camera.release()
cv2.destroyAllWindows()
QRコードの読み取り結果を保存する方法
QRコードの読み取り結果を保存するには、検出した内容をテキストファイルに書き込むことができます。
以下のコードでは、QRコードの内容をqr_code_data.txt
というファイルに保存します。
import cv2
from pyzbar.pyzbar import decode
camera = cv2.VideoCapture(0)
with open("qr_code_data.txt", "w") as file: # ファイルを開く
while True:
ret, frame = camera.read()
if not ret:
break
decoded_objects = decode(frame)
for obj in decoded_objects:
(x, y, w, h) = obj.rect
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) # QRコードに枠を描画
qr_data = obj.data.decode('utf-8') # QRコードの内容をデコード
print("QRコードの内容:", qr_data) # 内容を表示
file.write(qr_data + "\n") # QRコードの内容をファイルに保存
cv2.imshow("QRコード検出映像", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
camera.release()
cv2.destroyAllWindows()
このコードでは、QRコードの内容を読み取るたびに、qr_code_data.txt
ファイルにその内容を追記しています。
これにより、複数のQRコードを読み取った場合でも、すべての内容を保存することができます。
これで、QRコードを読み取る方法についての解説が完了しました。
これまでの内容を通じて、PythonとOpenCVを使用したさまざまな応用例を学ぶことができました。
まとめ
この記事では、PythonとOpenCVを使用してWebカメラの情報を取得し、映像を表示したり、保存したり、さまざまな処理を行う方法について詳しく解説しました。
また、顔認識や動体検知、QRコードの読み取りといった応用例も紹介し、それぞれの実装方法を具体的に示しました。
これらの技術を活用することで、リアルタイムの映像処理やデータ取得が可能となり、さまざまなプロジェクトに応用できるでしょう。
ぜひ、実際にコードを試してみて、あなた自身のプロジェクトに役立ててください。