代码
#include "cv.h"
#include "highgui.h"
#include "stdio.h"
int main( int argc, char** argv ) {
if (!argv[1])
{
printf("Need a file!\n");
return -1;
}
IplImage *frame,*gray,*edge,*all; //To hold movie images
CvCapture* capture = NULL;
if (!(capture=cvCreateFileCapture(argv[1])))
{printf("Failed to open %s\n",argv[1]);
return -1;
}
cvNamedWindow("Video",1);
// cvNamedWindow("Gray",1);
// cvNamedWindow("Edge",1);
cvNamedWindow("All",1);
int frame_width=int(cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH));
int frame_height=int(cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT));
CvSize frame_size=cvSize(frame_width,frame_height);
gray = cvCreateImage(frame_size,
IPL_DEPTH_8U,
1);
edge = cvCreateImage(frame_size,
IPL_DEPTH_8U,
1);
all = cvCreateImage(cvSize(3*frame_width,frame_height),
IPL_DEPTH_8U,
1);
//用来显示文字,初始化字体
CvFont font;
cvInitFont( &font, CV_FONT_HERSHEY_SCRIPT_SIMPLEX,1, 1);
while (frame){
frame=cvQueryFrame(capture);
cvShowImage("Video",frame);
cvCvtColor (frame,gray,CV_BGR2GRAY);
// cvShowImage("Gray",gray);
cvCanny(gray,edge,50, 150, 3);//后面三个参数随意填的
// cvShowImage("Edge",edge);
cvSetImageROI(all,cvRect(0,0,frame_width,frame_height));
cvSetImageCOI(frame,1);//因为灰度和边缘检测图都是单通道的,所以只取了frame的一个通道来复制
cvCopy(frame,all);
cvSetImageCOI(frame,0);
cvResetImageROI(all);
cvSetImageROI(all,cvRect(frame_width,0,frame_width,frame_height));
cvPutText(gray,"Gray",cvPoint(25,25),&font,cvScalar(55,55,55));
cvCopy(gray,all);
cvResetImageROI(all);
cvSetImageROI(all,cvRect(2*frame_width,0,frame_width,frame_height));
cvPutText(edge,"Edge",cvPoint(25,25),&font,cvScalar(155,155,155));
cvCopy(edge,all);
cvResetImageROI(all);
cvPutText(all,"Frame",cvPoint(25,25),&font,cvScalar(55,55,55));
cvShowImage("All",all);
if( cvWaitKey( 15 )==27 ) break;
}
cvReleaseImage(&frame);
cvReleaseImage(&gray);
cvReleaseImage(&edge);
cvReleaseImage(&all);
return 0;
}