2012-02-03 6 views
1

OpenCv을 사용하여 배경에있는 다른 것들이있는 이미지에서 얼굴을 성공적으로 감지했습니다. 이제 감지 된 부분 (즉, 얼굴) 만 추출하여 jpeg 또는 gif과 같은 이미지 형식으로 변환하여 신경 네트워크 학습에 사용할 얼굴 데이터베이스를 만들어야합니다.이미지에서 얼굴을 추출하는 방법은 무엇입니까?

어떻게하면됩니까?

+1

하는 답변을 받아주십시오! – eipxen

답변

4

얼굴을 감지하면 직사각형의 대각선이 생겨 얼굴 주위에 직사각형을 그립니다.

이제 이미지 ROI (Region of Interest)를 설정하고 ROI를 자르고 다른 이미지로 저장할 수 있습니다. 코드 위

/* After detecting the rectangle points, Do as follows */  
/* sets the Region of Interest 
    Note that the rectangle area has to be __INSIDE__ the image */ 
cvSetImageROI(img1, cvRect(10, 15, 150, 250)); 

/* create destination image 
    Note that cvGetSize will return the width and the height of ROI */ 
IplImage *img2 = cvCreateImage(cvGetSize(img1), 
           img1->depth, 
           img1->nChannels); 

/* copy subimage */ 
cvCopy(img1, img2, NULL); 

/* always reset the Region of Interest */ 
cvResetImageROI(img1); 

또한 cvSaveImage 기능이 파일에 이미지를 저장하는 데 사용할 수 있습니다) http://nashruddin.com/OpenCV_Region_of_Interest_(ROI에서 가져옵니다.

+0

@ arkiaz - 이미 감지 이미지를 laoded했습니다. 탐지 후 다시 cvLoadImage를 작성해야합니까? 아니면 감지 된 Rectangle 이후 코드의 cvSetImageROI 부분을 계속 사용해야합니까? –

+0

오, 미안합니다. 이미지를 다시로드 할 필요가 없습니다. 코드를 완전히 복사했습니다. 직사각형을 검출 한 후에 만 ​​cvSetImageROI로부터 시작합니다. –

+0

cvRect (1015150250)가 나타내는 것은 무엇입니까? 사각형 x, y 너비 및 높이를 의미합니까? –

1

이 시도 : 충분히 귀하의 질문에 대답하는 경우

for(i=0;i<(pFaceRectSeq?pFaceRectSeq->total:0);i++) 
{ 
CvRect* r=(CvRect*)cvGetSeqElem(pFaceRectSeq,i); 
int width=r->width; 
int height=r->height; 
cvSetImageROI(pInpImg,*r); 
IplImage* pCropImg=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3); 
cvCopy(pInpImg,pCropImg,NULL); 
cvShowImage("Cropped Window",pCropImg); 
cvWaitKey(0); 
cvResetImageROI(pInpImg); 
cvReleaseImage(&pCropImg); 
} 
관련 문제