PythonとOpenCVを使ってWebカメラの映像をリアルタイムで処理する方法について説明します。この記事は、PythonとOpenCVの基本的な知識があることを前提としています。
Webカメラからの映像取得
まずは、Webカメラから映像を取得する方法について説明します。以下に、Webカメラから映像を取得し、それを画面に表示するPythonのコードを示します。
import cv2
# カメラオブジェクトの作成
camera = cv2.VideoCapture(0)
while True:
# フレームの取得
ret, frame = camera.read()
# フレームの表示
cv2.imshow('camera', frame)
# 'q'キーが押されたらループを抜ける
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# メモリの解放
camera.release()
cv2.destroyAllWindows()
このコードは、Webカメラから映像を取得し、それをリアルタイムで画面に表示します。cv2.VideoCapture(0)
でカメラオブジェクトを作成し、camera.read()
でフレームを取得しています。取得したフレームはcv2.imshow()
で画面に表示されます。
リアルタイム処理
次に、取得した映像に対してリアルタイムで処理を行う方法について説明します。例として、映像から顔を検出する処理を行います。
import cv2
# カメラオブジェクトの作成
camera = cv2.VideoCapture(0)
# 顔検出器の作成
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
while True:
# フレームの取得
ret, frame = camera.read()
# グレースケール変換
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 顔の検出
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
# 検出した顔に矩形を描画
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
# フレームの表示
cv2.imshow('camera', frame)
# 'q'キーが押されたらループを抜ける
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# メモリの解放
camera.release()
cv2.destroyAllWindows()
このコードでは、cv2.CascadeClassifier()
で顔検出器を作成し、face_cascade.detectMultiScale()
で顔を検出しています。検出した顔の位置にはcv2.rectangle()
で矩形が描画されます。
以上が、PythonとOpenCVを使ってWebカメラの映像をリアルタイムで処理する方法です。これを応用することで、さまざまなリアルタイム処理が可能になります。例えば、顔認識、物体追跡、手話認識などが考えられます。ぜひ挑戦してみてください。.