任務:在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加一。