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を使う
Reviewed by mug
on
7/29/2017
Rating:
0 件のコメント: