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

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

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

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

一、函數(shù)簡介

1.1 VideoCapture

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

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

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

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

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

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

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

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

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

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

1.2 VideoWriter

功能:視頻寫出、文件保存
我們先來看一下opencv3中的這個函數(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ū)別的,這個再一會附代碼的時候我會附兩個不同版本的。

二、代碼示例

附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;
}

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

三、結果展示

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

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

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

您可能感興趣的文章:

相關文章

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

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

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

    C語言格式輸出方式

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

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

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

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

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

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

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

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

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

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

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

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

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

    C語言每日練習之二叉堆

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

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

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

最新評論

闻喜县| 福建省| 虞城县| 察雅县| 东辽县| 项城市| 通辽市| 霸州市| 葵青区| 来安县| 菏泽市| 吴忠市| 和平县| 屏南县| 六安市| 乡宁县| 陇西县| 江川县| 久治县| 府谷县| 太康县| 白山市| 南华县| 张家界市| 虹口区| 唐山市| 珠海市| 开鲁县| 乐至县| 娱乐| 合川市| 彭阳县| 浦北县| 扎鲁特旗| 卓尼县| 尉氏县| 赤城县| 彭州市| 黄浦区| 吉木萨尔县| 乌鲁木齐县|