任务:在ubuntu下利用c++编写opencv代码实现拍照和录像功能。
涉及的知识点:
1、Mat类
2、按键检测
3、图片批量存储
直接给代码:
#include <opencv2/opencv.hpp>
#include <string>
using namespace cv;
int main(){
VideoCapture capture(0);
int key;
int i=0; //图片数
int j=0; //视频数
char pName[100];//图片文件名
char vName[100];//视频文件名
while(1){
Mat Frame;
namedWindow("摄像头");
capture>>Frame;
if((key=waitKey(5))!=-1){
if(key=='p'){
sprintf(pName,"photo/%d.jpg",i);
imwrite(pName, Frame);
while(key==waitKey(5)==-1);
i++;
}
if(key=='v'){
destroyWindow("摄像头");
sprintf(vName,"video/%d.avi",j);
VideoWriter writer(vName, CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));
do{
capture>>Frame;
writer<<Frame;
imshow("录像",Frame);
}while((key=waitKey(5))==-1);
j++;
destroyWindow("录像");
}
}
imshow("摄像头",Frame);
waitKey(10);
}
return 0;
}
其中按键p为拍摄照片,然后将照片存储到photo文件夹中。
按键v为录制视频,再按其他按键可以停止录制,文件存储到video文件夹中。
文件多存储利用了sprintf()函数:sprintf(pName,"photo/%d.jpg",i);%d占位符,每存储一张图片i加一。