Opencv1、Opencv2 拍照片、写视频

////////////////////////////////OPENCV1//////////////////////////////////////////////////////////
char tmpPath[512] = {0};
memset(tmpPath,0,512);
sprintf(tmpPath,"c:\\orientdoc\\video.avi");
IplImage* frame;
CvVideoWriter* video = NULL;
CvCapture *capture   = NULL;// 视频获取结构,用来作为视频获取函数的一个参数


cvNamedWindow( "Example", CV_WINDOW_AUTOSIZE );//创建窗口,(名字,默认大小)
capture = cvCreateCameraCapture(0);//打开摄像头,从摄像头中获取视频

Sleep(2000);
frame = cvQueryFrame( capture );// 从摄像头中抓取并返回每一帧
if( !frame )
frame = cvQueryFrame( capture );
video=cvCreateVideoWriter(tmpPath,-1,10,cvSize(frame->width,frame->height));//CV_FOURCC('D', 'I', 'V', 'X')
if(!video)
{
return;
}

while(1) 
{
frame = cvQueryFrame( capture );// 从摄像头中抓取并返回每一帧
if( !frame )
frame = cvQueryFrame( capture );
cvShowImage( "Example", frame );//在窗口上显示每一帧
cvWriteFrame(video,frame);
char c = cvWaitKey(100);//延时,每秒钟约33帧;符合人眼观看速度;
if( c == 27 ) break;//由于是死循环,而且没有控制台,当按下键盘esc键,将按键的ASCII值给C,如果C为ESC(ASCII 为27)循环退出退出循环;
}
cvReleaseVideoWriter(&video); 
cvReleaseCapture( &capture );//释放内存;
cvDestroyWindow( "Example2" );//销毁窗口


///////////////////////////////////////////////OPENCV2///////////////////////////////////////////
cv::VideoCapture  capture(0);  
cv::Mat frame;  
if(!capture.isOpened())  
{  
return;
}  
char key;  
char szVideoFileName[512]; 
char szImageFileName[512];
int count = 0;  
char szVideo[1024];
sprintf(szVideo,"VIDEO");
char szImage[1024];
sprintf(szVideo,"VIDEO");
sprintf(szImage,"IMAGE");
sprintf(szVideoFileName,"c:\\OrientDoc\\video.avi");
sprintf(szImageFileName,"c:\\OrientDoc\\Picture%d.png");
cv::namedWindow(szVideo,1); 
cv::namedWindow(szImage,1); 
cv::VideoWriter writer(szVideoFileName, CV_FOURCC('D','I','V','X'), 10,cv::Size(640, 480), true);
//capture.set(CV_CAP_PROP_WHITE_BALANCE_BLUE_U, 0);
while(1)  
{  
key = cv::waitKey(100);  
capture>>frame;  
writer<<frame;
if(frame.data == NULL)//容错
{
continue;
}
cv::imshow(szVideo,frame);  

if(key == 27)  //按ESC键退出程序 
break; 
if(key == 32)//按空格键进行拍照  
{  
cv::imwrite(szImageFileName,frame);//图片保存到本工程目录中  
cv::imshow(szImage,frame);  
}
}
writer.release();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值