import cv2
import numpy as np
# Haar Cascade分類器をロードして顔を検出
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 歯の色を白くする関数
def whiten_teeth(image, teeth_mask):
# 歯の部分の色を白に変更
white_color = (255, 255, 255)
teeth_mask = cv2.cvtColor(teeth_mask, cv2.COLOR_GRAY2BGR)
white_teeth = cv2.addWeighted(image, 1, teeth_mask, 0.8, 0)
white_teeth[np.where((teeth_mask == [255, 255, 255]).all(axis=2))] = white_color
return white_teeth
# 画像を読み込む
image = cv2.imread("path_to_your_image.jpg")
# グレースケールに変換
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 顔の検出
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 顔の範囲内で歯のマスクを作成(仮のマスクとして、顔の中央部を選択)
for (x, y, w, h) in faces:
teeth_mask = np.zeros((image.shape[0], image.shape[1]), dtype=np.uint8)
teeth_mask[y+h//2:y+h, x:x+w] = 255
# 歯の色を白くする
white_teeth_image = whiten_teeth(image, teeth_mask)
# 加工後の画像を表示
cv2.imshow("Original Image", image)
cv2.imshow("White Teeth", white_teeth_image)
cv2.waitKey(0)
cv2.destroyAllWindows()