最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?opencv之視頻讀寫(VideoCapture,VideoWriter)的實(shí)現(xiàn)

 更新時(shí)間:2026年03月04日 09:48:55   作者:阿超沒有蛀牙  
本文主要介紹了OpenCV中的VideoCapture和VideoWriter函數(shù),用于視頻的讀取和保存,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

這篇博客主要講解OpenCV中視頻讀寫。
主要涉及到兩個(gè)API函數(shù):
VideoCapture
VideoWriter

一、函數(shù)簡(jiǎn)介

1.1 VideoCapture

視頻文件讀取、攝像頭讀取、視頻流讀取
VideoCapture既支持從視頻文件(.avi , .mpg格式)讀取,也支持直接從攝像機(jī)(比如電腦自帶攝像頭)中讀取。要想獲取視頻需要先創(chuàng)建一個(gè)VideoCapture對(duì)象,VideoCapture對(duì)象的

創(chuàng)建方式有以下三種:

【方式一】是從文件(.MPG或.AVI格式)中讀取視頻,**對(duì)象創(chuàng)建以后,OpenCV將會(huì)打開文件并做好準(zhǔn)備讀取它,如果打開成功,我們將可以開始讀取視頻的幀,并且cv::VideoCapture的成員函數(shù)isOpened()將會(huì)返回true(建議在打開視頻或攝像頭時(shí)都使用該成員函數(shù)判斷是否打開成功)。

方法:  cv::VideoCapture capture(const string& filename);  // 從視頻文件讀取 
例程:  cv::VideoCapture capture("C:/Users/DADA/DATA/gogo.avi");  // 從視頻文件讀取

【方式二】是從攝像機(jī)中讀取視頻,**這種情況下,我們會(huì)給出一個(gè)標(biāo)識(shí)符,用于表示我們想要訪問的攝像機(jī),及其與操作系統(tǒng)的握手方式。對(duì)于攝像機(jī)而言,這個(gè)標(biāo)志符就是一個(gè)標(biāo)志數(shù)字——**如果只有1個(gè)攝像機(jī),那么就是0,如果系統(tǒng)中有多個(gè)攝像機(jī),那么只要將其向上增加即可。**標(biāo)識(shí)符另外一部分是攝像機(jī)域(camera domain),用于表示攝像機(jī)的類型,這個(gè)域值可以是下面任一預(yù)定義常量。

cv::VideoCapture capture(int device );  //視頻捕捉設(shè)備 id ---筆記本電腦的用0表示 

【方式三】先創(chuàng)建一個(gè)捕獲對(duì)象,然后通過成員函數(shù)open()來(lái)設(shè)定打開的信息,操作如下。

cv::VideoCapture VideoCapture;  這里的第二個(gè)VideoCapture是一個(gè)對(duì)象名
VideoCapture.open( "C:/Users/DADA/DATA/gogo.avi" );  

將視頻幀讀取到cv::Mat矩陣中,有兩種方式:一種是read()操作;另一種是 “>>”操作。

cv::Mat frame;  
cap.read(frame); //讀取方式一  
cap >> frame; //讀取方式二  

1.2 VideoWriter

功能:視頻寫出、文件保存
我們先來(lái)看一下opencv3中的這個(gè)函數(shù)原型:

VideoWriter  video_writer;
video_writer.open(const string& filename, int fourcc, double fps,Size frameSize, bool isColor=true);

參數(shù)意義:

  • filename:保存文件名稱及路徑;
  • fourcc:表示壓縮幀的codec,一般用CV_FOURCC(‘M’,‘J’,‘P’,‘G’) = motion-jpeg codec;
  • fps:表示幀率,可用video_writer.get(CV_CAP_PROP_FPS);
  • frameSize:保存的視頻大小;

而opencv4中與opencv3還是有一定區(qū)別的,這個(gè)再一會(huì)附代碼的時(shí)候我會(huì)附兩個(gè)不同版本的。

二、代碼示例

附opencv4及以上所用代碼:

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	// 打開攝像頭
	// VideoCapture capture(0); 

	// 打開文件
	VideoCapture capture;
	capture.open("C:/Users/Dell/Desktop/opencv-master/samples/data/vtest.avi");
	if (!capture.isOpened()) {
		printf("could not read this video file...\n");
		return -1;
	}
	Size S = Size((int)capture.get(CAP_PROP_FRAME_WIDTH),
		(int)capture.get(CAP_PROP_FRAME_HEIGHT));
	int fps = capture.get(CAP_PROP_FPS);
	printf("current fps : %d \n", fps);
	VideoWriter writer("C:/Users/Dell/Desktop/picture/test.mp4", CAP_OPENCV_MJPEG, fps, S, true);

	Mat frame;
	namedWindow("camera-demo", WINDOW_AUTOSIZE);
	while (capture.read(frame)) {
		imshow("camera-demo", frame);
		writer.write(frame);
		char c = waitKey(50);
		if (c == 27) {
			break;
		}
	}
	capture.release();
	writer.release();
	waitKey(0);
	return 0;
}

opencv3代碼:

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	// 打開攝像頭
	// VideoCapture capture(0); 

	// 打開文件
	VideoCapture capture;
	capture.open("D:/vcprojects/images/768x576.avi");
	if (!capture.isOpened()) {
		printf("could not read this video file...\n");
		return -1;
	}
	Size S = Size((int)capture.get(CV_CAP_PROP_FRAME_WIDTH),
		(int)capture.get(CV_CAP_PROP_FRAME_HEIGHT));
	int fps = capture.get(CV_CAP_PROP_FPS);
	printf("current fps : %d \n", fps);
	VideoWriter writer("D:/test.mp4", CV_FOURCC('D', 'I', 'V', 'X'), fps, S, true);

	Mat frame;
	namedWindow("camera-demo", CV_WINDOW_AUTOSIZE);
	while (capture.read(frame)) {
		imshow("camera-demo", frame);
		writer.write(frame);
		char c = waitKey(50);
		if (c == 27) {
			break;
		}
	}
	capture.release();
	writer.release();
	waitKey(0);
	return 0;
}

其實(shí)不是代碼有什么區(qū)別 只是一些標(biāo)識(shí)符在不同opencv版本中的寫法不一樣。

三、結(jié)果展示

上邊為輸出的fps(每秒傳輸?shù)膸瑪?shù))
下邊為我們讀取的視頻

以及我們文件夾中保存的視頻:

到此這篇關(guān)于C++ opencv之視頻讀寫(VideoCapture,VideoWriter)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)opencv 視頻讀寫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)漢諾塔(圖文詳解)

    C語(yǔ)言實(shí)現(xiàn)漢諾塔(圖文詳解)

    個(gè)人覺得漢諾塔這個(gè)遞歸算法比電子老鼠的難了一些,不過一旦理解了也還是可以的,其實(shí)網(wǎng)上也有很多代碼,可以直接參考。記得大一開始時(shí)就做過漢諾塔的習(xí)題,但是那時(shí)代碼寫得很長(zhǎng)很長(zhǎng),也是不理解遞歸的結(jié)果。今天重新來(lái)實(shí)現(xiàn)一下
    2021-08-08
  • C語(yǔ)言格式輸出方式

    C語(yǔ)言格式輸出方式

    本文介紹了C語(yǔ)言中printf函數(shù)的格式輸出,包括整數(shù)和浮點(diǎn)數(shù)的格式化輸出方法,以及如何通過指定寬度和小數(shù)位數(shù)來(lái)控制輸出格式
    2025-01-01
  • c++中將二維數(shù)組元素變換為逆向存放的實(shí)現(xiàn)代碼

    c++中將二維數(shù)組元素變換為逆向存放的實(shí)現(xiàn)代碼

    編程將一個(gè)二維數(shù)組元素變換為逆向存放,即按元素在內(nèi)存中的物理排列位置,第一個(gè)元素變成倒數(shù)第一個(gè)元素,第二個(gè)元素變成倒數(shù)第二個(gè)元素,依此類推
    2020-11-11
  • 解決在Mac下直接解壓C++靜態(tài)庫(kù)出現(xiàn)的問題

    解決在Mac下直接解壓C++靜態(tài)庫(kù)出現(xiàn)的問題

    最近在研究C++的各種編譯構(gòu)建過程,學(xué)習(xí)了一下cmake,gyp/ninja這些自動(dòng)化構(gòu)建工具后,想著自己試下用純命令行跑一遍編譯流程。在試圖把C++靜態(tài)庫(kù)編譯為動(dòng)態(tài)庫(kù)的過程中遇到了棘手的問題,找了好久后發(fā)現(xiàn)是跟Mac平臺(tái)相關(guān)的,這里記錄一下,望對(duì)遇到類似問題的童鞋有幫助。
    2016-12-12
  • C語(yǔ)言strlen和sizeof在數(shù)組中的使用詳解

    C語(yǔ)言strlen和sizeof在數(shù)組中的使用詳解

    對(duì)于 strlen 和 sizeof,相信不少程序員會(huì)混淆其功能。雖然從表面上看它們都可以求字符串的長(zhǎng)度,但二者卻存在著許多不同之處及本質(zhì)區(qū)別
    2021-10-10
  • C++ 詳解數(shù)據(jù)結(jié)構(gòu)中的搜索二叉樹

    C++ 詳解數(shù)據(jù)結(jié)構(gòu)中的搜索二叉樹

    搜索二叉樹是一種具有良好排序和查找性能的二叉樹數(shù)據(jù)結(jié)構(gòu),包括多種操作,本篇只介紹插入,排序(遍歷),和刪除操作,重點(diǎn)是刪除操作比較復(fù)雜
    2022-04-04
  • MFC自繪Button按鈕分析和實(shí)現(xiàn)

    MFC自繪Button按鈕分析和實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了MFC自繪Button按鈕分析和實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C++中inet_pton、inet_ntop函數(shù)的用法

    C++中inet_pton、inet_ntop函數(shù)的用法

    這篇文章主要介紹了C++中inet_pton、inet_ntop函數(shù)的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語(yǔ)言每日練習(xí)之二叉堆

    C語(yǔ)言每日練習(xí)之二叉堆

    這篇文章主要為大家介紹了C語(yǔ)言二叉堆,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • C++ vector容器實(shí)現(xiàn)貪吃蛇小游戲

    C++ vector容器實(shí)現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了C++ vector容器實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02

最新評(píng)論

开原市| 安溪县| 平山县| 饶河县| 突泉县| 关岭| 平湖市| 突泉县| 班玛县| 阆中市| 玉山县| 子长县| 哈巴河县| 奎屯市| 碌曲县| 贺州市| 中阳县| 北票市| 婺源县| 鹤山市| 南华县| 白沙| 揭东县| 山阳县| 香港| 深水埗区| 揭东县| 当涂县| 饶阳县| 霍林郭勒市| 勃利县| 门头沟区| 会东县| 武义县| 奉节县| 泰兴市| 德令哈市| 尼木县| 宝应县| 卢氏县| 奉化市|