我試圖檢測圖像中的臉部並嘗試將檢測到的臉部保存爲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