19,468
社区成员
发帖
与我相关
我的任务
分享
#include "cv.h"
#include "highgui.h"
#include <ctype.h>
#include <stdio.h>
using namespace cv;
int main(int argc, char** argv)
{
IplImage* frame;
IplImage* different;
CvCapture* capture=0;
Mat sample=imread("sample.bmp");//150*90
bool equal=false;
capture=cvCaptureFromCAM(0);
if(!capture)
{
printf("Could not initialize capturing \n");
return -1;
}
frame=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
cvNamedWindow("Image",0);
cvNamedWindow("distinguish",0);
different=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
while(capture)
{
frame=cvQueryFrame(capture);
Mat frame0(frame,0);
Mat distinguish(different,0);
imshow("distinguish",distinguish);
bool re=true;
cvShowImage("Image",frame);
//判断
for(int j=0;j<480;j+=8)
{
uchar *datai=frame0.ptr<uchar>(j);//创建原图j行指针
uchar *datad=distinguish.ptr<uchar>(j);
for(int i=0,k=0;i<640*3;i+=24,k+=8)
{
equal=false;
for(int j1=0;j1<90;j1++)
{
uchar *datas=sample.ptr<uchar>(j1);//创建对比图j1行指针
for(int i1=0;i1<150*3;i1+=3)
{
if((datai[i]==datas[i1])&&(datai[i+1]==datas[i1+1])&&(datai[i+2]==datas[i1+2]))
{
equal=true;
datad[k]=255;
break;
}
if(equal)
break;
}
if(equal)
break;
}
}
}
Mat different1;
dilate(distinguish,different1,Mat(),Point(-1,-1),8);
erode(different1,distinguish,Mat(),Point(-1,-1),8);
if(cvWaitKey(1)==27)
break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("Image");
}