py-opencv 画像の一部を切り抜いて保存する
py-opencvを使用して顔認識してみました。FreeBSD + OpenCV 2.4.9 + py-opencvで顔認識
認識した顔の部分だけ切り抜いてみます。
numpyのslice
ヒントはここです。
How to crop an image in OpenCV using Python
cv2.imreadして取得した画像オブジェクトは
nupyの行列として認識されているのですね。
行列の一部をsliceで切り出し。
切り出したオブジェクトをcv2.imwriteで保存します。
- # -*- coding:utf-8 -*-
- import numpy
- import cv2
- cascade_path = '/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml'
- image_path = 'lena.jpg'
- color = (255, 255, 255) #白
- #ファイル読み込み
- image = cv2.imread(image_path)
- #グレースケール変換
- image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
- #カスケード分類器の特徴量を取得する
- cascade = cv2.CascadeClassifier(cascade_path)
- #物体認識(顔認識)の実行
- facerect = cascade.detectMultiScale(
- image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
- if len(facerect) <= 0:
- exit()
- #検出した顔を囲む矩形の作成
- for rect in facerect:
- cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), color, thickness=2)
- #認識結果の保存
- cv2.imwrite("detected.jpg", image)
- for rect in facerect:
- #cv2.imwrite('demo.jpg', image[rect])
- print rect
- x = rect[0]
- y = rect[1]
- w = rect[2]
- h = rect[3]
- # img[y: y + h, x: x + w]
- cv2.imwrite('demo.jpg', image[y:y+h, x:x+w])
元画像

顔認識

認識部分の切り出し

狙い通りの動作です
コメント