pyenv上のPython3でOpenCV3を使う


環境
・macOS Sierra 10.12.4
・Homebrew インストール済み
・Python3.5.1 (pyenvでAnaconda3-4.0.0をインストール)
・Numpy インストール済み




まずはOpenCV3を入れるところからなので、Homebrewを使ってOpenCV3をインストールする。

ターミナルから、コマンド

$ brew install opencv3 --with-python3 --without-python --with-contrib

で、OpenCV3をインストール。この辺はQiitaの「pyenvでインストールしたpython3からOpenCV3を利用できるようにする」を参考にした。ただ、途中でエラーを吐くので、「mac に OpenCV 3.2 をインストール (python3)」の記事を参考に、--without-python --with-contribをつけて対処。


次に、Python3からcv2のライブラリを使えるようにする。

$ cd /Users/ユーザー名/.pyenv/versions/anaconda3-4.0.0/lib/python3.5/site-packages

site-packagesに移動。ここで、「ユーザー名」と書いたところは、各々のユーザー名に変えて、あとanacondaとかpythonのバージョン(もしくはパス自体)は自分のインストールしている環境に合わせてね。移動したら、下のコマンドで、リンクを貼る。

$ ln -s /usr/local/Cellar/opencv3/3.2.0/lib/python3.5/site-packages/cv2.cpython-35m-darwin.so cv2.so

ここもバージョンは適宜変更してください。


一応これで終わりで、ちゃんとできていれば、Pythonの対話モードで、

********iMac:~ ********$ python
Python 3.5.1 |Anaconda 4.0.0 (x86_64)| (default, Dec  7 2015, 11:24:55) 
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> 

となる。



折角なので、顔認識とモザイク処理を試してみた。

(プログラムはここから借用しました:Qiita | OpenCV+Pythonで顔にモザイク


Lenna.png


#coding:utf-8

import numpy as np
import cv2

#顔探索用のカスケード型分類器を取得
face_cascade = cv2.CascadeClassifier("/usr/local/Cellar/opencv3/3.2.0/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml")

img = cv2.imread("Lenna.png")
result = cv2.imread("Lenna.png")

#読み込んだ画像をグレースケールに変換
gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)

#分類器で顔を認識する
face = face_cascade.detectMultiScale(gray,1.3,5)

if 0 < len(face):

    print("get face")

    for (x,y,w,h) in face:

        #顔の部分だけ切り抜いてモザイク処理をする
        cut_img = img[y:y+h,x:x+w]
        cut_face = cut_img.shape[:2][::-1]
        #10分の1にする
        cut_img = cv2.resize(cut_img,(int(cut_face[0]/10), int(cut_face[0]/10)))
        #画像を元のサイズに拡大
        cut_img = cv2.resize(cut_img, cut_face, interpolation=cv2.INTER_NEAREST)

        #モザイク処理した部分を重ねる
        result[y:y+h,x:x+w] = cut_img

else:

    print("no face")


cv2.imshow("mosaicface",result)
cv2.imwrite("mosaicface.png",result)
cv2.waitKey(0)
cv2.destroyAllWindows()


元のコードだと、cv2.resizeの引数のところがfloatになるようでエラー吐いたので、無理やりintに変換した。あとはprintはpython2の書き方だったので変えたのと、画像を保存するようにしたくらい。


画像がこんな感じで表示されるけど、これはウィンドウを選択して、適当に何かキーを叩けば閉じるようになっている。



てことで、ちゃんとモザイク処理ができた。






pyenv上のPython3でOpenCV3を使う pyenv上のPython3でOpenCV3を使う Reviewed by mug on 7/29/2017 Rating: 5

0 件のコメント:

Powered by Blogger.