C++ 从连续人脸检测中比较当前和以前的人脸
我正在进行人脸检测。我需要比较当前和以前(连续)的人脸。有人能帮我从连续的人脸检测中提取当前和以前的人脸吗?我对此一无所知 这是我的人脸检测代码C++ 从连续人脸检测中比较当前和以前的人脸,c++,opencv,image-processing,C++,Opencv,Image Processing,我正在进行人脸检测。我需要比较当前和以前(连续)的人脸。有人能帮我从连续的人脸检测中提取当前和以前的人脸吗?我对此一无所知 这是我的人脸检测代码 void facedetect(IplImage* image) { ct1++; cvNamedWindow("output"); int j=0,i,count=0,strsize; char numstr[50]; CvPoint ul,lr,w,h,ul1,lr1; CvRect *r; string path; IplImage* image
void facedetect(IplImage* image)
{
ct1++;
cvNamedWindow("output");
int j=0,i,count=0,strsize;
char numstr[50];
CvPoint ul,lr,w,h,ul1,lr1;
CvRect *r;
string path;
IplImage* image1;IplImage* tmpsize;IplImage* reimg;
CvHaarClassifierCascade* cascade=(CvHaarClassifierCascade*) cvLoad(cascade_name);
CvMemStorage* storage=cvCreateMemStorage(0);
const char *extract;
if(!cascade)
{
cout<<"Coulid not load classifier cascade"<<endl;
}
if(cascade)
{ faces=cvHaarDetectObjects(image,cascade,storage,1.1,1,CV_HAAR_DO_CANNY_PRUNING,cvSize(10,10));
for(int i=0;i<(faces ? faces->total : 0);i++)
{
string s1="im",re,rename,ex=".pgm";
sprintf(numstr, "%d", k);
re = s1 + numstr;
rename=re+ex;
char *extract1=new char[rename.size()+1];
extract1[rename.size()]=0; memcpy(extract1,rename.c_str(),rename.size());
strsize=rename.size();
r=(CvRect*) cvGetSeqElem(faces,i);
ul.x=r->x;
ul.y=r->y;
w.x=r->width;
h.y=r->height;
lr.x=(r->x + r->width);
lr.y=(r->y + r->height);
cvSetImageROI(image,cvRect(ul.x,ul.y,w.x,h.y));
image1=cvCreateImage(cvGetSize(image),image->depth,image->nChannels);
cvCopy(image, image1, NULL);
reimg=resizeImage(image1, 40, 40, true);
saveImage(reimg,extract1);
Mat img=cvarrToMat(reimg);
//Mat img1=cvarrToMat();
imshow("result",img); //this is the current image, but i need to get the previous image also.
//readImag(img,"/home/athira/Image/folderr", path);
cvResetImageROI(image);
cvRectangle(image,ul,lr,CV_RGB(1,255,0),3,8,0);
j++,count++;
k++;
arr[l]=ul.x;
arr1[l]=ul.y;
cout<<"frame"<<ct1<<" "<<"face"<<ct<<":"<<"x: "<<ul.x<<endl;
cout<<"frame"<<ct1<<" "<<"face"<<ct<<":"<<"y: "<<ul.y<<endl;
cout<<""<<endl;
ct++;
//compareImages(l,faces->total);
//feature_extract(img,img1);
l++;
}
width=image->width;
height=image->height;
resoltion=width*height;
s=(float) 0.0301/100;
diff=s*resoltion;
cvShowImage("output",image);
cvWaitKey(0);
}
}
void facedetect(IplImage*图像)
{
ct1++;
CVD(“输出”);
int j=0,i,count=0,strsize;
char numstr[50];
CVU点ul、lr、w、h、ul1、lr1;
CvRect*r;
字符串路径;
IplImage*image1;IplImage*tmpsize;IplImage*reimg;
CvHaarClassifierCascade*级联=(CvHaarClassifierCascade*)cvLoad(级联_名称);
CvMemStorage*storage=cvCreateMemStorage(0);
常量字符*提取;
如果(!级联)
{
库尔特;
lr.x=(r->x+r->宽度);
lr.y=(r->y+r->高度);
cvSetImageROI(图像,cvRect(ul.x,ul.y,w.x,h.y));
image1=cvCreateImage(cvGetSize(图像),图像->深度,图像->通道);
cvCopy(图像,图像1,空);
reimg=调整图像大小(图像1,40,40,真);
saveImage(reimg,extract1);
Mat img=cvarrToMat(reimg);
//Mat img1=cvarrToMat();
imshow(“result”,img);//这是当前图像,但我还需要获取上一个图像。
//readImag(img,“/home/athira/Image/folderr”,路径);
cvResetImageROI(图像);
CV矩形(图像、ul、lr、CV_RGB(1255,0)、3,8,0);
j++,count++;
k++;
arr[l]=ul.x;
arr1[l]=ul.y;
请把这个世界变成一个更好的地方,用C++ API代替过时的C,请给我一个答案。