OpenCv
を使用して、他のものが背景にある画像から顔を検出できました。 ここでは、検出された部分(顔)だけを抽出し、jpeg
またはgif
などの画像形式に変換して、神経細胞訓練に使用する顔データベースを作成する必要があります。イメージから顔を抽出する方法は?
どうすればいいですか?
OpenCv
を使用して、他のものが背景にある画像から顔を検出できました。 ここでは、検出された部分(顔)だけを抽出し、jpeg
またはgif
などの画像形式に変換して、神経細胞訓練に使用する顔データベースを作成する必要があります。イメージから顔を抽出する方法は?
どうすればいいですか?
顔を検出すると、顔の周囲に長方形を描くために使用される長方形の反対側の隅が表示されます。
イメージ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);
http://nashruddin.com/OpenCV_Region_of_Interest_(ROIから取られる)
さらにcvSaveImage
機能は、ファイルに画像を保存するために使用することができます。
@ arkiaz-私はすでに検出のためにイメージを暴露しています。検出後、再びcvLoadImageを書く必要がありますか?または検出されたRectangleの後に、コードのcvSetImageROI部分を続けなければなりませんか? –
ああ、申し訳ありません。画像を再度読み込む必要はありません。私はコードを完全にコピーしました。矩形を検出した後にのみ、cvSetImageROIから開始します。 –
cvRect(10,15,150,250)は何を示していますか?それはx、yの幅と高さの矩形を意味しますか? –
これを試してください:それは十分にあなたの質問に答えた場合
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