2013-05-29 4 views
2

opencv와 python에서 초보자이며 이미지 내의 얼굴의 키포인트와 설명자를 수집하려고합니다.opencv와 python : 마스크를 사용하여 cv2.surf()를 사용하는 방법

나는 정면 얼굴 템플릿이있는 HAAR 캐스케이드 분류기를 사용하여 이미지의 얼굴을 찾습니다. HAAR 캐스케이드는 나에게 이미지의 얼굴을 표시하는 좌표 목록을 제공합니다. 그 좌표에서 "마스크"를 생성하여 cv2.surf()을 사용하여 마스크 된 영역 내에서 키포인트와 설명자를 추출 할 수 있습니다.

나는 그 마스크를 만드는 법을 모른다.

예를 들어 작업하려면 this photo을 시도하십시오. 내가 faceRegions를 사용하여 마스크 서핑 추출을하고 싶습니다이 후

import cv2 
import numpy as np 

# Load image and convert to grayscale 
img = cv2.imread('testPhoto.jpg') 
imgg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

# Look for faces in the image 
cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml') 
faceRegions = cascade.detectMultiScale(imgg) 

: 여기

는 지금까지 코드입니다. 이 같은 faceRegions 모습을 가정 :

array([[488, 163, 91, 91], 
     [357, 184, 93, 93], 
     [154, 78, 107, 107]], dtype=int32) 

imgg에있는 세 개의 얼굴은 내가 그들의 특정한 폭과 높이가 특정 위치에서 세 개의 마스크를 만들 있었다. 그리고 cv2.surf() 마스크가 적용된 영역 만 보입니다. 어떻게해야합니까?

답변

3

faceRegionsx,y,width,height의 얼굴을 나타냅니다. 따라서이 좌표로 ROI (Region of Interest)를 설정하고 해당 직사각형을 SURF 기능에 이미지로 보낼 수 있습니다. 예를 들어

:

face1 = imgg[y:y+height, x:x+width] 

지금 당신이 cv2.SURF이 face1를 전달할 수 있습니다() 대신에 전체 이미지를 전달.

+0

그래, 나는 그것을 많이 생각하고 그렇게했다. 고맙습니다. 이미지의 지정된 영역에 마스크를 배치하는 방법을 생각해보십시오. – samkhan13

+0

작동하는 경우 대답을 수락하고 닫을 수 있습니다. 또한 동일한 절차를 사용하여 배치 할 수 있습니다. 예 :'img2 [y : y + height, x : x + width] = face1' 여기서 img2는 새로운 이미지이고, y, x는 새로운 위치이지만 width와 height는 face1과 동일해야합니다 1. –

+0

네, 가장 간단한 방법이라고 생각합니다. 다시 감사합니다 :) – samkhan13