我试图检测图像中的脸部并尝试将检测到的脸部保存为OpenCV中的图像。在OpenCV中检测脸部并保存检测到的脸部
在下面的detectfaces函数中有一些问题。
#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
想要的感兴趣区域保存到另一个图像。任何更正或改进告诉我..
我试着用的..但错误依然存在.... – lakesh 2012-02-16 16:36:32
以及一个cvRect是这样创建的: CvRect rect = cvRect(25,25,img2-> width,img2-> height);你只是将一个cvSeq *转换成一个cvRect *。你需要了解脸部开始的位置,这是矩形的第一个点,那么序列中的大小就是矩形的大小。仍然错误在那里,并没有在setROI – andrea 2012-02-16 16:42:04
然后我怎么纠正这个错误.. – lakesh 2012-02-16 16:50:10