作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
/* * ===================================================================================== * * Filename: videocapture.cpp * * Description: A Program of Capture the video Camrea 本程序可以进行摄像头采集、录像(按键 r)和截图(鼠标左键) * * Version: 1.0 * Created: 02/02/2009 09:48:27 AM * Revision: none * Compiler: gcc * * Author: Futuredaemon (BUPT), gnuhpc@gmail.com * Company: BUPT_UNITED * * ===================================================================================== */ #include "cv.h" #include "highgui.h" #include #include #include IplImage *frame=0; void mouseHandler(int event,int x,int y,int flags,void *param); int main(int argc , char **argv) { CvCapture *capture = 0; int flag= 1; int iscolor=1; int fps=15; int frameW=320; int frameH=240; int press=0; CvVideoWriter *writer=cvCreateVideoWriter("out.avi",CV_FOURCC('D','I','V','X'), fps,cvSize(frameW,frameH),iscolor); 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); cvSetMouseCallback("main",mouseHandler,NULL); for (;;) { frame = cvQueryFrame(capture); if (!frame) { break; } if( flag==0 ) { cvWriteFrame(writer,frame); } cvShowImage("main",frame); if ((press=cvWaitKey(20))=='r') { if( flag==1 ) { printf("Starting Record the Video!/n"); flag = 0; } else { printf("Stop the recording!/n"); flag = 1; } } else if(press==27) { break; } } cvReleaseCapture(&capture); cvDestroyWindow("main"); return 0; } void mouseHandler(int event,int x,int y,int flags,void *param) { time_t curtime=time(NULL); char *date=ctime(&curtime); switch ( event ) { case CV_EVENT_LBUTTONDOWN : printf("Get a picrure named %s/n",date+11); sprintf(date,"%s.jpg",date+11); cvSaveImage(date,frame); break; default : break; } }