Symfoware

Symfowareについての考察blog

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で保存します。


  1. # -*- coding:utf-8 -*-
  2. import numpy
  3. import cv2
  4. cascade_path = '/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml'
  5. image_path = 'lena.jpg'
  6. color = (255, 255, 255) #白
  7. #ファイル読み込み
  8. image = cv2.imread(image_path)
  9. #グレースケール変換
  10. image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
  11. #カスケード分類器の特徴量を取得する
  12. cascade = cv2.CascadeClassifier(cascade_path)
  13. #物体認識(顔認識)の実行
  14. facerect = cascade.detectMultiScale(
  15.                 image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
  16. if len(facerect) <= 0:
  17.     exit()
  18. #検出した顔を囲む矩形の作成
  19. for rect in facerect:
  20.     cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), color, thickness=2)
  21. #認識結果の保存
  22. cv2.imwrite("detected.jpg", image)
  23. for rect in facerect:
  24.     #cv2.imwrite('demo.jpg', image[rect])
  25.     print rect
  26.     x = rect[0]
  27.     y = rect[1]
  28.     w = rect[2]
  29.     h = rect[3]
  30.     
  31.     # img[y: y + h, x: x + w]
  32.     cv2.imwrite('demo.jpg', image[y:y+h, x:x+w])




元画像

494_01.png


顔認識

494_02.png


認識部分の切り出し

494_03.png



狙い通りの動作です
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/11/02(日) 14:47:04|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<OpenCV を使用して、写真に特定の人物が写っているか判定する | ホーム | OpenCV 2.4.9 使用できるDetector,Extractor,Matcher>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1524-342fbf2d
この記事にトラックバックする(FC2ブログユーザー)