画像の顔を検出し、検出した顔をOpenCVの画像として保存しようとしています。顔を検出してOpenCVで検出した顔を保存する
下記の検出機能でいくつかの問題があります。
#include "stdafx.h"
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
CvHaarClassifierCascade *cascade;
CvMemStorage *storage;
void detectFaces(IplImage *img);
int _tmain(int argc, _TCHAR* argv[])
{
//CvCapture *capture;
IplImage *img;//*out;
int key = 0;
char *filename = "C:/OpenCV2.1/data/haarcascades/haarcascade_frontalface_alt.xml";
cascade = (CvHaarClassifierCascade*)cvLoad(filename, 0, 0, 0);
storage = cvCreateMemStorage(0);
img = cvLoadImage("Yurico.png");
assert(cascade && storage && img);
cvNamedWindow("video:", 1);
//cvNamedWindow("video1:", 1);
//out = detectFaces(img);
detectFaces(img);
cvWaitKey(0);
//cvShowImage("video", out);
cvDestroyWindow("video:");
//cvDestroyWindow("video1:");
cvReleaseImage(&img);
cvReleaseHaarClassifierCascade(&cascade);
cvReleaseMemStorage(&storage);
return 0;
}
void detectFaces(IplImage *img)
{
int i;
CvRect *r;
CvSeq *faces = cvHaarDetectObjects(
img,
cascade,
storage,
1.1,
3,
0 /*CV_HAAR_DO_CANNY_PRUNNING*/,
cvSize(40, 40));
for(i = 0 ; i < (faces ? faces->total : 0) ; i++) {
CvRect *r = (CvRect*)cvGetSeqElem(faces, i);
cvRectangle(img,
cvPoint(r->x, r->y),
cvPoint(r->x + r->width, r->y + r->height),
CV_RGB(255, 0, 0), 1, 8, 0);
}
//cvShowImage("video:", img);
cvSetImageROI(img, CvRect *r);
IplImage *img2 = cvCreateImage(cvGetSize(img),
img->depth,
img->nChannels);
cvSaveImage("Lakshmen.jpg",img2);
}
はこれを言っエラーを持っている:
Error 1 error C2664: 'cvSetImageROI' : cannot convert parameter 2 from 'CvRect *' to 'CvRect' c:\users\hp\documents\visual studio 2010\projects\facedetect\facedetect\facedetect.cpp 67 1 facedetect
は別の画像に関心領域を節約したいです。すべての修正や改善は私に教えてくれます..
を書き後cvRectは、このように作成されるだけでなく – lakesh
....私はそれを試してみました..しかし、エラーがまだ存在します: CvRect rect = cvRect(25,25、img2-> width、img2-> height);あなたは単にcvSeq *をcvRect *にキャストしています。あなたは顔がどこにあるのかを理解する必要があり、これが矩形の最初のポイントである場合、シーケンス内のサイズはrectのサイズになります。それでもエラーはありますが、setROI – andrea
ではなく、間違いを修正する方法はありません。 – lakesh