一、讀取攝像頭
重點(diǎn)語(yǔ)句:VideoCapture、imshow
原理:使用VideoCapture語(yǔ)句讀取攝像頭,再利用while一次次將VideoCapture所讀取的數(shù)據(jù)利用imshow語(yǔ)句一幀幀地讀取出來(lái)
#include <opencv2/opencv.hpp>
#include <iostream>
#include "CameraVideo.h"
using namespace cv;
using namespace std;
int main(int argc,char** argv)
{
VideoCapture video; //用VideoCapture來(lái)讀取攝像頭
Mat picture; //聲明一個(gè)保存圖像的類
video.open(0); //括號(hào)的0表示使用電腦自帶的攝像頭
if (!video.isOpened()) //判斷攝像頭是否讀取成功
{
return -1; //返回一個(gè)代數(shù)值,表示函數(shù)失?。ㄈ魹閞eturn 1,則表示ture)
}
while(1) //(讀取成功,使用循環(huán)語(yǔ)句將視頻一幀一幀地展示出來(lái))
{
video >> picture; //詞條將video中的數(shù)據(jù)流向picture
imshow("input", picture); //使用imshow語(yǔ)句將圖片顯示出來(lái)
waitKey(30); //停頓30ms
}
return 0;
}
二、保存攝像頭視頻
重點(diǎn)語(yǔ)句:VideoWriter
原理:在攝像頭讀取完圖之后,利用VideoWriter語(yǔ)句將圖像保存為固定格式文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-506540.html
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat picture;
VideoCapture video(0);
if (!video.isOpened())
{
return-1;
}
video >> picture;
VideoWriter outputVideo; //用VideoWriter語(yǔ)句保存視頻
int codec = VideoWriter::fourcc('P', 'I','M','1'); //OpenCV4版本的編碼設(shè)置格式
//('P', 'I','M','1')—MPEG-1編碼類型,文件擴(kuò)展名.avi
int fps = 25; //設(shè)置幀率
string outputVideoPath = "CameraVideo.mp4"; //保存視頻的文件名
outputVideo.open(outputVideoPath, codec, fps, picture.size());//創(chuàng)建保存視頻文件的視頻流
if (!outputVideo.isOpened()) //判斷視頻流是否創(chuàng)建成功
{
return -1;
}
while (1)
{
if (!video.read(picture)) //檢測(cè)是否能夠讀取一幀圖像
{
break;
}
outputVideo.write(picture); //將video的圖像數(shù)據(jù)一幀圖像寫入
imshow("CameraVideo.mp4", picture); //顯示圖像
char c = waitKey(50);
if (c == 27) //按Esc保存視頻
{
break;
}
}
return 0;
}
三、如何按空格鍵保存攝像頭視頻
通過加入一個(gè)循環(huán)語(yǔ)句,按空格將圖片按照1.2.3.4.5.6.的順序保存下來(lái)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-506540.html
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat picture;
VideoCapture video(0);
if (!video.isOpened())
{
return-1;
}
int i = 0;
while (1)
{
video >> picture;
imshow("input", picture);
if (waitKey(20) == 32) //設(shè)置為按空格保存
{
string name = to_string(i) + ".jpg"; //將照片以jpg的格式進(jìn)行命名
imwrite(name, picture); //將按空格時(shí)的圖像幀保存下來(lái)
i++;
}
if (waitKey(10) == 27) //按Esc鍵退出
{
break;
}
}
return 0;
}
到了這里,關(guān)于OpenCV 實(shí)現(xiàn)讀取攝像頭、視頻讀取保存 (C++)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!