python + opencv で肌色を検出して褐色にするだけ
の簡単な作業をしてみた。
考え方
- 肌色領域のマスク画像を生成
- マスク画像から肌色部分を褐色にする
- 簡単
やってみる
肌色領域の検出
歴代の先人達がよしなにやってくれている
顔検出に必要なxmlを拝借し、ぱろすけさんが書いたコードを参考にするとできる
マスク画像から肌色部部分を褐色にする
画素値をいじる簡単なお仕事
def blown_skin_mask(im, mask): height, width = im.shape[:2] hsv_im = cv2.cvtColor(im, cv2.COLOR_BGR2HSV) for y in range(height): for x in range(width): if (mask[y, x, 0]): h = hsv_im[y, x, 0] s = hsv_im[y, x, 1] if (h < 8): hsv_im[y, x, 0] = h + 180 - 8 else: hsv_im[y, x, 0] -= 8 if (s < 212): hsv_im[y, x, 1] += 43 else: hsv_im[y, x, 1] = 255 return cv2.cvtColor(hsv_im, cv2.COLOR_HSV2BGR)
元画像と肌色領域のマスク画像をもらって、マスクの部分だけHSVをいじる
HSVの値はお好みの褐色具合で、個人的には (h,s,v)=(15,180,230)くらいが健康的な褐色で好き
コード全体
gistに載せておいた
やってみる
次の画像に試してみる
結果を並べてみる
肌色領域がまだまだ改善できそうな感じです
今回はここらへんで終わり
カッショクゴキゲンヨウジョ!!