作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
#include "cv.h"
#include "highgui.h"
#include <ctype.h>
#include <stdio.h>
int main(int argc , char **argv)
{
IplImage *laplace = 0;
IplImage *coloelaplace = 0;
IplImage *planes[3]={0,0,0};//多个图像面
CvCapture *capture = 0;
if (argc==1|| (argc==2 && strlen(argv[1])==1 && isdigit(argv[1][0])))
{
capture = cvCaptureFromCAM(-1);
}
else if(argc==2)
{
capture = cvCaptureFromAVI(argv[1]);
}
if (!capture)
{
fprintf(stderr,"Could not initialize capturing.../n");
return -1;
}
cvNamedWindow("main",0);
for (;;)
{
IplImage *frame=0;
int i;
frame = cvQueryFrame(capture);//从摄像头或者文件中抓取并返回一帧
if (!frame)
{
break;
}
if (!laplace)
{
for (i=0;i<3;i++)
{
planes[i]=cvCreateImage(cvSize(frame->width,frame->height),8,1);
}
laplace=cvCreateImage(cvSize(frame->width,frame->height),IPL_DEPTH_16S,1);
coloelaplace=cvCreateImage(cvSize(frame->width,frame->height),8,3);
}
cvCvtPixToPlane(frame,planes[0],planes[1],planes[2],0);
//#define cvCvtPixToPlane cvSplit
for (i=0;i<3;i++)
{
cvLaplace(planes[i],laplace,3);//计算图像planes[i]的 Laplacian 变换
cvConvertScaleAbs(laplace,planes[i],1,0);//planes[]=ABS(laplace)
}
cvCvtPlaneToPix(planes[0],planes[1],planes[2],0,coloelaplace);
//#define cvCvtPlaneToPix cvMerge
coloelaplace->origin=frame->origin;
cvShowImage("main",coloelaplace);
if (cvWaitKey(10)>=0)
{
break;
}
}
cvReleaseCapture(&capture);
cvDestroyWindow("main");
return 0;
}