# 実験課題9 # 3.9 顔検出 import cv2 # 顔検出のためのカスケード型分類器のオブジェクトを生成 cascade_path = cv2.data.haarcascades + 'haarcascade_frontalface_default.xml' face_cascade = cv2.CascadeClassifier(cascade_path) # Webカメラを初期化 cap = cv2.VideoCapture(0) if not cap.isOpened(): print("カメラを開けませんでした.") else: while True: ret, frame = cap.read() masked = frame.copy() if not ret: print("フレームを取得できませんでした.") break # 顔検出の精度と処理速度向上のため,グレースケール画像を作成 gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # グレースケール画像から顔を検出 faces = face_cascade.detectMultiScale( gray_img, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30) ) # 検出されたすべての顔に対してループ処理 for (x, y, w, h) in faces: # 顔を隠す画像 mask_img = cv2.imread('mask.jpg') # 読み込んだ画像を検出された顔と同じサイズにリサイズ mask_resized = cv2.resize(mask_img, (w, h)) # ROIによって元のフレームの顔領域をマスク画像で上書き masked[y:y + h, x:x + w] = mask_resized # 顔部分を矩形で囲む cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.imshow('Face Detection', frame) cv2.imshow('Face Masking', masked) # 'q' キーが押されたら終了 if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()