国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenCv(C++)學(xué)習(xí)筆記二——視頻的讀取與輸出

這篇具有很好參考價(jià)值的文章主要介紹了OpenCv(C++)學(xué)習(xí)筆記二——視頻的讀取與輸出。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

視頻的讀取

cv::VideoCapture類是讀取視頻的,cv::VideoCapture既支持視頻文件的讀取,也支持從視頻捕捉文件中讀取視頻。cv::VideoCapture類創(chuàng)建對(duì)象的方式如下三種:

cv::VideoCapture capture(const string& filename,);
//第一種:從輸入的文件名對(duì)應(yīng)文件中讀取
cv::VideoCapture capture(int device);
//第二種:從視頻捕捉設(shè)備ID中讀取
cv::VideoCapture capture();
//第三種:調(diào)用無參構(gòu)造函數(shù)創(chuàng)建對(duì)象

第一種方法是從文件(AVI和MP4都可以)中逐幀讀取視頻。對(duì)象創(chuàng)建后,OpenCv將會(huì)打開文件并準(zhǔn)備讀取它。如果打開成功,將可以開始讀取視頻的幀,通過cv::VideoCapture類的成員函數(shù)isOpened()返回True的結(jié)果可以判斷打開讀取對(duì)象成功(建議在打開視頻或者攝像頭的時(shí)候調(diào)用此成員函數(shù),以判斷是否打開成功)

第二種是從視頻捕捉設(shè)備中讀取視頻,一般電腦配套的攝像頭ID號(hào)是0,外接的USB攝像頭ID號(hào)為1.

第三種方式創(chuàng)建一個(gè)捕獲對(duì)象,而不提供任何關(guān)于打開的信息。對(duì)象創(chuàng)建后通過成員函數(shù)open()來設(shè)定打開的信息。open()操作也有一下兩種方式

cv::VideoCapture cap;
cap.open("D:\\360\\smart_car.mp4");//第一種路徑方式打開視頻

打開之后需要將視頻幀(其實(shí)就是把視頻中的圖像取出來)讀取到cv::Mat矩陣中,共有兩種方式,一種是read操作,一種是>>操作。示例如下:

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

補(bǔ)充說明:獲取視頻某些屬性

retval=cap.get(propId)

propId:從0到18的數(shù)字,每個(gè)數(shù)字表示視頻的屬性

索引 flags 意義
0 cv2::CAP_ PROP_POS_MSEC
1 cv2::CAP_PROP_POS_FRAMES 從0開始索引幀,幀位置
2 cv2::CAP_PROP_POS_AVI_RATIO 視頻文件的相對(duì)位置(0表示開始,1表示結(jié)束)
3 cv2::CAP_PROP_FRAME_WIDTH 視頻流的幀寬度
4 cv2::CAP_PROP_FRAME_HEIGHT 視頻流的幀高度
5 cv2::CAP_PROP_FPS 幀率
6 cv2::CAP_PROP_FOURCC 編解碼器四字符代碼
7 cv2::CAP_PROP_FRAME_COUNT 視頻文件的幀

綜上所述:
下面是一個(gè)打開視頻的示例代碼:

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

using namespace std;
using namespace cv;

int main()
{
    VideoCapture CvCapture("D:\\360\\smart_car.mp4");
    if(!CvCapture.isOpened())
    {
        cout<<"Read video Failed!"<<std::endl;//可以刪除std::
        while(1);
        return -1;
    }
    Mat img_lhc;
    namedWindow("test");
    int num=CvCapture.get(cv::CAP_PROP_FRAME_COUNT);//可以刪除cv::
    for(int i=0;i<num-1;++i)
    {
        //CvCapture>>img_lhc;另一種導(dǎo)入圖片的寫法
        CvCapture.read(img_lhc);
        imshow("test",img_lhc);
        //等待30ms后,按下q鍵即可退出播放
        if(waitKey(30)=='q')
        {
            break;
        }
    }
    destroyWindow("test");//銷毀窗口
    CvCapture.release();//釋放對(duì)象
    return 0;
}

視頻的輸出

cv::VideoWriter類用于寫入視頻。該類較之cv::VideoCapture類要復(fù)雜一些。cv::VideoWrite類的對(duì)象有兩種創(chuàng)建方式。第一種是使用構(gòu)建函數(shù),第二種是使用open()函數(shù),具體示例如下:
第一種方式:

cv::VideoWriter out(
const string& filename,//輸出文件名
int fourcc,//編碼形式,使用CV_FOURCC()宏
double fps,//輸出視頻幀率
cv::Size frame_size,//單幀圖像大小
bool is_color=true//如果是false則可傳入灰度圖像,true是彩色的
)

第二種方式:

cv::VideoWriter out;
out.open(
"my_video.mpg",//輸出文件名
CV_FOURCC('D','I','V','X'),//MPEG-4編碼
30.0,//輸出視頻幀率
cv::Size(640,480),//單幀圖像分辨率為640像素*480像素
true//只可傳入彩色圖像,false為灰度圖像
)

其中需要注意的是FOURCC編碼形式,操作時(shí)通常用以下4個(gè)字符連接起來形成一個(gè)FOURCC編碼,形式為cv::VideoWriter::fourcc(char c1,char c2,char c3,char c4)。
常用格式有以下幾種:
CV_FOURCC(‘P’,‘I’,‘M’,‘1’)=MPEG-1 codec。
CV_FOURCC(‘M’,‘J’,‘P’,‘G’)=motion-jpeg codec。
CV_FOURCC(‘M’,‘P’,‘4’,‘2’)=MPEG-4.2 codec。
CV_FOURCC(‘D’,‘I’,‘V’,‘X’)=MPEG-4 codec。
CV_FOURCC(‘F’,‘L’,‘V’,‘1’)=FLV1 codec。
像創(chuàng)建的cv::VideoWrite對(duì)象寫入圖像也有兩種形式,即write()操作以及<<操作。

cv::VideoWriter::write
(const Mat& image);//寫入圖像作為下一幀
out<<frame

示例:文章來源地址http://www.zghlxwxcb.cn/news/detail-817555.html

#include<stdio.h>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(void)
{
    Mat frame;
    string filename="D:\\360\\smart_car.mp4";
    VideoCapture cap(filename);
    VideoWriter out;
    out.open("D:\\360\\test.mp4",cv::VideoWriter::fourcc('D','I','V','X'),
    cap.get(CAP_PROP_FPS),Size(cap.get(CAP_PROP_FRAME_WIDTH),
    cap.get(CAP_PROP_FRAME_HEIGHT)),true);
    if(!cap.isOpened())
    {
        cout<<"Video load failed!"<<endl;
        return -1;
    }
    while(1)
    {
        cap>>frame;
        if(frame.empty())
        {
            cout<<"Video process finished!"<<endl;
            return 0;
        }
        imshow("video",frame);
        if(waitKey(10)=='q')
        break;
        out<<frame;
    }
    cap.release();
    //out.release();
    /*
    在使用OpenCV進(jìn)行視頻處理時(shí),通常會(huì)使用cv2.VideoCapture()函數(shù)來讀取視頻文件或者從攝像頭獲取視頻流。當(dāng)不再需要使用視頻流時(shí),可以通過調(diào)用cap.release()來釋放資源,關(guān)閉視頻流。
    類似地,當(dāng)使用cv2.VideoWriter()函數(shù)將處理后的視頻保存為文件時(shí),可以通過調(diào)用out.release()來釋放資源,關(guān)閉視頻寫入器。
    這些函數(shù)的調(diào)用可以確保在程序結(jié)束時(shí),釋放所有使用的資源,避免資源泄露和內(nèi)存溢出等問題。
    */
    return 0;
}

到了這里,關(guān)于OpenCv(C++)學(xué)習(xí)筆記二——視頻的讀取與輸出的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • OpenCV獲取網(wǎng)絡(luò)攝像頭實(shí)時(shí)視頻流

    參考文章: [常用工具] OpenCV獲取網(wǎng)絡(luò)攝像頭實(shí)時(shí)視頻流_opencv網(wǎng)絡(luò)攝像頭 [常用工具] OpenCV獲取網(wǎng)絡(luò)攝像頭實(shí)時(shí)視頻流_opencv網(wǎng)絡(luò)攝像頭_落痕的寒假的博客-CSDN博客 在使用OpenCv處理視頻時(shí),無論是視頻文件還是攝像頭畫面,都要使用VideoCapture類來進(jìn)行每一幀圖像的處理。當(dāng)我們

    2024年02月01日
    瀏覽(101)
  • Opencv保存ESP32-CAM視頻流

    Opencv保存ESP32-CAM視頻流 esp32cam是一個(gè)很便宜的視頻模組,可以用作監(jiān)控等功能。此時(shí)就需要保存esp32的視頻流,方便查看等操作,python代碼如下 前置條件:視頻流正常,已安裝opencv

    2024年02月08日
    瀏覽(104)
  • 【精選】基于OpenCV的實(shí)時(shí)視頻流車牌識(shí)別(源碼&教程)

    【精選】基于OpenCV的實(shí)時(shí)視頻流車牌識(shí)別(源碼&教程)

    近年來,智能交通系統(tǒng)(ITS)在我國(guó)應(yīng)用日益廣泛。作為ITS重要組成部分的自動(dòng)車牌識(shí)別系統(tǒng)在交通流量檢測(cè)、交通誘導(dǎo)控制、違章車輛監(jiān)控等方面有著廣泛的應(yīng)用,是確保道路安全暢通的重要手段,也為統(tǒng)計(jì)有關(guān)資料,為管理者決策提供有效數(shù)字依據(jù)的重要途徑。由于一般的識(shí)別系

    2024年01月23日
    瀏覽(94)
  • 基于OpenCv+Django的網(wǎng)絡(luò)實(shí)時(shí)視頻流傳輸(前后端分離)

    基于OpenCv+Django的網(wǎng)絡(luò)實(shí)時(shí)視頻流傳輸(前后端分離)

    秋風(fēng)閣——北溪入江流:https://focus-wind.com/ 秋風(fēng)閣——基于OpenCv+Django的網(wǎng)絡(luò)實(shí)時(shí)視頻流傳輸(前后端分離) 使用OpenCv捕獲攝像機(jī)畫面后,我們有時(shí)候需要將畫面顯示在界面上。本博客基于Django的前后端分離模式,將視頻流從后端讀取,傳送給前端顯示。 在使用Django進(jìn)行視頻

    2024年02月08日
    瀏覽(91)
  • 一種在 Python 中實(shí)現(xiàn)更快 OpenCV 視頻流的多線程方法

    一種在 Python 中實(shí)現(xiàn)更快 OpenCV 視頻流的多線程方法

    概述 在本文中,我們將看到兩個(gè)沒有多線程的 Python 代碼示例,用于從攝像頭讀取視頻幀。我們將看到使用/不使用多線程獲得的 FPS 的差異。 什么是多線程? 線程是進(jìn)程中的一個(gè)執(zhí)行單元。多線程是指通過在線程之間快速切換對(duì) CPU 的控制(稱為上下文切換)來并發(fā)執(zhí)行多個(gè)

    2024年02月16日
    瀏覽(96)
  • VS+QT+Opencv使用YOLOv4對(duì)視頻流進(jìn)行目標(biāo)檢測(cè)

    對(duì)單張圖像的檢測(cè),請(qǐng)參考:https://blog.csdn.net/qq_45445740/article/details/109659938

    2024年02月12日
    瀏覽(90)
  • 使用Flask+OpenCV實(shí)現(xiàn)瀏覽器/微信小程序的視頻流傳輸

    前言 一、 Flask+瀏覽器實(shí)現(xiàn) 二、 Flask+微信小程序?qū)崿F(xiàn) 三、Flask+uni-app小程序?qū)崿F(xiàn) 后記 近期在做的東西涉及到實(shí)時(shí)視頻的處理,碰到一些問題,因此將之記錄下來,便于日后翻看,同時(shí)也希望能給遇到同樣問題的小伙伴提供幫助。 實(shí)現(xiàn)代碼如下: 分為 app.py 和index.html。 1. F

    2024年02月06日
    瀏覽(167)
  • WSL2通過OpenCV調(diào)用并展示本機(jī)攝像頭的RTSP視頻流

    WSL2通過OpenCV調(diào)用并展示本機(jī)攝像頭的RTSP視頻流

    本篇博客的由來如上圖哈哈,WSL2 相關(guān)安裝教程可以參考我之前的博客:Win11安裝WSL2和Nvidia驅(qū)動(dòng) 更多文章歡迎來我的博客小站看呀,會(huì)有更多的技術(shù)細(xì)節(jié)~ ubuntu上請(qǐng)執(zhí)行 或者編譯安裝 如果報(bào)錯(cuò) Could NOT find OpenSSL ,安裝如下依賴即可解決 下載解壓 EasyDarwin Easydarwin是國(guó)內(nèi)團(tuán)隊(duì)開

    2024年02月09日
    瀏覽(106)
  • 【jetson 硬解碼】使用NVDEC模塊解碼rtsp視頻流,超低時(shí)延、比opencv更快、資源更少

    1、jetson系統(tǒng):32.7.1, 2、jetpack:4.6.1, 3、deepstream:6.0.1, FastDeploy 問題1:

    2024年02月14日
    瀏覽(149)
  • WSL2 ubuntu子系統(tǒng)OpenCV調(diào)用本機(jī)攝像頭的RTSP視頻流做開發(fā)測(cè)試

    WSL2 ubuntu子系統(tǒng)OpenCV調(diào)用本機(jī)攝像頭的RTSP視頻流做開發(fā)測(cè)試

    由于WSL2環(huán)境與主機(jī)系統(tǒng)隔離,訪問本機(jī)攝像頭是有限的,但是,可以通過第三方庫(kù)或網(wǎng)絡(luò)攝像頭來解決這個(gè)問題,本文將本地?cái)z像頭通過rtsp流來給WSL2訪問。 詳見鏈接:https://blog.csdn.net/weixin_46119406/article/details/132271955?spm=1001.2014.3001.5501 Easydarwin是國(guó)內(nèi)團(tuán)隊(duì)開發(fā)的開源流媒體框架

    2024年02月11日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包