我已經使用OpenCv
成功檢測到背景中有其他東西的圖像。 現在我只需要提取檢測到的部分(即臉部),並將其轉換爲jpeg
或gif
等圖像格式,以製作用於我的神經網絡訓練的臉部數據庫。如何從圖像中提取臉部?
我該怎麼做?
我已經使用OpenCv
成功檢測到背景中有其他東西的圖像。 現在我只需要提取檢測到的部分(即臉部),並將其轉換爲jpeg
或gif
等圖像格式,以製作用於我的神經網絡訓練的臉部數據庫。如何從圖像中提取臉部?
我該怎麼做?
一旦你檢測到面部,你會得到一個矩形的對角,用來在面部周圍繪製矩形。
現在您可以設置圖像ROI(感興趣區域),裁剪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);
以上代碼從http://nashruddin.com/OpenCV_Region_of_Interest_(ROI截取)
此外cvSaveImage
功能可用於圖像保存到文件中。
@ arkiaz-I已經爲檢測拍攝了一張圖像。所以在檢測之後,我是否需要再次寫入cvLoadImage?或者在檢測到Rectangle之後,我必須繼續使用cvSetImageROI代碼的一部分? – 2012-02-03 17:44:42
哦,我很抱歉。您無需再次加載圖像。我完全複製了代碼。僅在檢測到矩形後才從cvSetImageROI開始。 – 2012-02-03 17:46:44
cvRect(10,15,150,250)是什麼意思。是指矩形x,y的寬度和高度? – 2012-02-03 18:07:01
試試這個:
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);
}
一定要接受一個答案,如果它足夠解答您的問題! – eipxen 2012-02-03 17:54:34