MacbookAirのカメラで顔が写ったら顔をネガポジ変換(Python3+OpenCV3+PIL)

Share on Facebook
Pocket
LINEで送る
Bookmark this on Google Bookmarks

シリーズ:
MacbookAirのカメラで顔が写ったらモザイク加工(Python3+OpenCV3+PIL)
MacbookAirのカメラで顔が写ったら顔をエッジ抽出(Python3+OpenCV3+PIL)
MacbookAirのカメラで顔が写ったら顔をネガポジ変換(Python3+OpenCV3+PIL)
MacbookAirのカメラで顔が写ったら顔を笑い男マーク(Python3+OpenCV3+PIL)

前提

MacbookAirのカメラで顔が写ったらモザイク加工(Python3+OpenCV3+PIL)で作ったFaceクラスを作成しておく。

github のfaces.py

 

ネガポジ変換

ネガポジ変換に関してはネガポジ変換の章で。

Python OpenCV3でネガポジ変換(濃淡値を反転する)
Python OpenCV3でもっと簡単なネガポジ変換(濃淡の変換)

&ngsp;

Faceクラスにget_negaposi_faceメソッドを実装

Faceクラスに顔が移ったらエッジ化するget_negaposi_faceメソッドを実装した。

     def get_negaposi_faces(self, image, min_size=(100, 100)):
        """
        顔をネガポジ変換するメソッド。
        image: cv2.imreadで読み取った変数
        min_size: 顔判定する最小サイズの指定。
        """

        # イメージをpillowで扱うことのできる形式に変換しておく。
        img_edit = Image.fromarray(image)

        # 顔認識
        faces = self.get_faces(image, min_size)

        # 顔があった場合。
        if len(faces) > 0:

            # 複数の顔があった場合、1つずつ四角で囲っていく。
            for face in faces:

                # 顔の部分の左上のx,y座標(微調整)
                face_x = face[0] - 50
                face_y = face[1] - 100
                # 顔の部分の横の長さと縦の長さ(微調整)
                face_width = face[0]+face[2] + 50
                face_height = face[1]+face[3] + 100

                # 顔を切り抜く
                cut_face = img_edit.crop((face_x,
                                          face_y,
                                          face_width,
                                          face_height))

                # OpenCV用のデータに変換
                cut_face = np.asarray(cut_face)

                cut_face = 255 - cut_face

                # pillow用のデータに変換
                cut_face = Image.fromarray(cut_face)

                # 元の画像に加工した顔画像を貼り付ける。
                img_edit.paste(cut_face, tuple((face_x, face_y)))

        
        #pillow用のデータをOpenCVデータに変換
        img_opencv = np.asarray(img_edit)

        return img_opencv

実行してみる。

if __name__ == '__main__':
    
    face = Face()

    """
    image = cv2.imread("./image/physicists.jpg", 1)
    mosaic_faces = face.get_mosaic_faces(image, min_size=(10, 10))

    # 表示
    cv2.imshow("Show MOSAIC Image", mosaic_faces)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    """

    # カメラからキャプチャー
    cap = cv2.VideoCapture(0)

    while(True):

        # 動画ストリームからフレームを取得
        ret, frame = cap.read()

        # モザイク処理
        # frame = face.get_mosaic_faces(frame, ratio=40)
        # cv2.imshow('MOSAIC FACE', frame)

        # エッジ
        # frame = face.get_edge_faces(frame)
        # cv2.imshow('EDGE FACE', frame)

        # ネガポジ変換
        frame = face.get_negaposi_faces(frame)
        cv2.imshow("NEGAPOSI FACE", frame)

        # qを押したら終了。
        k = cv2.waitKey(1)
        if k == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

(opencv_python)$ python faces.py

スクリーンショット 2015-07-11 12.16.36

 

ネガポジ変換!

 

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です