欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Qt+opencv實(shí)現(xiàn)視頻分解為圖片

 更新時間:2023年12月28日 15:21:02   作者:N階二進(jìn)制  
這篇文章主要為大家詳細(xì)介紹了如何利用Qt和opencv實(shí)現(xiàn)視頻分解為圖片,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

最近遇到一些售前提供的BUG,但是他們提供的是錄像視頻,因?yàn)樘幚盹@示速度比較快,因此很難找到出現(xiàn)問題的位置。需要反復(fù)播放,自己編寫了一個視頻分解成圖片這樣就可以一張圖一張圖的對比,方便查看。

開發(fā)環(huán)境

qt+openvc

sudo apt install libopencv-dev

源碼說明

引用opencv動態(tài)庫

.pro文件需要添加opencv的動態(tài)庫

LIBS += -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs

Qt代碼

將視頻分解成每一幀,然后將每一幀保存位圖片。

void MainWindow::slotClickBtn()
{ // 打開視頻文件
    cv::VideoCapture video("/pan/錄屏_選擇區(qū)域_20231227104611.mp4");

    // 檢查視頻是否成功打開
    if (!video.isOpened()) {
        std::cerr << "無法打開視頻文件" << std::endl;

    }

    // 讀取視頻的幀率和總幀數(shù)
    double fps = video.get(cv::CAP_PROP_FPS);
    int totalFrames = video.get(cv::CAP_PROP_FRAME_COUNT);

    // 逐幀讀取視頻并保存為圖像文件
    for (int frameNumber = 0; frameNumber < totalFrames; ++frameNumber) {
        cv::Mat frame;
        video.read(frame);

        // 檢查是否成功讀取幀
        if (frame.empty()) {
            std::cerr << "無法讀取視頻幀" << std::endl;
            break;
        }

        // 生成圖像文件名,例如 frame_0001.jpg
        std::string filename = "frame_" + std::to_string(frameNumber + 1) + ".jpg";

        // 保存幀為圖像文件
        cv::imwrite(filename, frame);
    }

    // 關(guān)閉視頻文件
    video.release();
    std::cout << "視頻分解完成,共生成 " << totalFrames << " 張圖像文件。" << std::endl;

}

源代碼地址

https://gitcode.net/arv002/qt/-/tree/master/opencv/VideoDecomposition

擴(kuò)展

VideoCapture 詳解

cv::VideoCapture 是 OpenCV 中用于從視頻文件、攝像頭或圖像序列中捕獲幀的類。它提供了一種方便的方式來處理視頻流和圖像序列。

以下是一些關(guān)于 cv::VideoCapture 的主要方法和屬性的詳細(xì)說明:

構(gòu)造函數(shù)

cv::VideoCapture(const cv::String& filename);
cv::VideoCapture(int index);

filename:視頻文件的路徑,可以是本地文件路徑或網(wǎng)絡(luò) URL。

index:攝像頭的索引。通常,0 表示默認(rèn)攝像頭,1 表示第二個攝像頭,以此類推。

成員函數(shù)

bool open(const cv::String& filename);

打開視頻文件。返回 true 表示成功打開,false 表示失敗。

bool isOpened() const;

檢查視頻是否成功打開。返回 true 表示成功打開,false 表示失敗。

void release();

釋放資源。關(guān)閉視頻文件或釋放攝像頭。

bool read(cv::OutputArray image);

從視頻流中讀取一幀。返回 true 表示成功讀取,false 表示讀取失敗或到達(dá)視頻末尾。

double get(int propId) const;

獲取視頻流的屬性值,例如幀率、寬度、高度等。propId 是屬性標(biāo)識符,例如 cv::CAP_PROP_FPS 表示幀率。

bool set(int propId, double value);

設(shè)置視頻流的屬性值。propId 是屬性標(biāo)識符,value 是要設(shè)置的值。

示例用法

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

int main() {
    cv::VideoCapture cap("path/to/your/video.mp4");

    if (!cap.isOpened()) {
        std::cerr << "無法打開視頻文件" << std::endl;
        return -1;
    }

    double fps = cap.get(cv::CAP_PROP_FPS);
    int width = cap.get(cv::CAP_PROP_FRAME_WIDTH);
    int height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);

    std::cout << "幀率: " << fps << ",寬度: " << width << ",高度: " << height << std::endl;

    cv::Mat frame;
    while (cap.read(frame)) {
        // 處理每一幀
        cv::imshow("Frame", frame);
        cv::waitKey(30);  // 等待30毫秒
    }

    cap.release();
    cv::destroyAllWindows();

    return 0;
}

上述代碼演示了如何打開視頻文件、獲取視頻屬性、逐幀讀取視頻并顯示。請根據(jù)實(shí)際需求調(diào)整。

到此這篇關(guān)于利用Qt+opencv實(shí)現(xiàn)視頻分解為圖片的文章就介紹到這了,更多相關(guān)Qt opencv視頻分解為圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)例真題講解數(shù)據(jù)結(jié)構(gòu)中單向環(huán)形鏈表

    C語言實(shí)例真題講解數(shù)據(jù)結(jié)構(gòu)中單向環(huán)形鏈表

    鏈表可以說是一種最為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)了,而單向鏈表更是基礎(chǔ)中的基礎(chǔ)。鏈表是由一組元素以特定的順序組合或鏈接在一起的,不同元素之間在邏輯上相鄰,但是在物理上并不一定相鄰。在維護(hù)一組數(shù)據(jù)集合時,就可以使用鏈表,這一點(diǎn)和數(shù)組很相似
    2022-04-04
  • C++操作MySQL的實(shí)現(xiàn)示例

    C++操作MySQL的實(shí)現(xiàn)示例

    這篇文章主要介紹了C++操作MySQL的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C++調(diào)用libcurl開源庫實(shí)現(xiàn)郵件的發(fā)送功能流程詳解

    C++調(diào)用libcurl開源庫實(shí)現(xiàn)郵件的發(fā)送功能流程詳解

    libcurl是一個免費(fèi)開源的網(wǎng)絡(luò)傳輸庫,支持ftp、ftps、tftp,http、https、telnet、ldap、pop3、smtp等多種協(xié)議,接下來讓我們一起來了解吧
    2021-11-11
  • C語言開發(fā)實(shí)現(xiàn)通訊錄管理系統(tǒng)

    C語言開發(fā)實(shí)現(xiàn)通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言開發(fā)實(shí)現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Qt實(shí)現(xiàn)可以計(jì)算大數(shù)的簡單計(jì)算器

    Qt實(shí)現(xiàn)可以計(jì)算大數(shù)的簡單計(jì)算器

    計(jì)算器是我們生活中很常見的東西,它可以由多種語言多種方式來實(shí)現(xiàn)。本文主要介紹的是基于C++語言,由QT實(shí)現(xiàn)的可以計(jì)算大數(shù)的簡單計(jì)算器,需要的可以參考一下
    2022-12-12
  • C++ 位圖及位圖的實(shí)現(xiàn)原理

    C++ 位圖及位圖的實(shí)現(xiàn)原理

    位圖實(shí)際上就是一個數(shù)組,因?yàn)閿?shù)組有隨機(jī)訪問的功能,比較方便查找,這個數(shù)組一般是整形,今天通過本文給大家分享c++位圖的實(shí)現(xiàn)原理及實(shí)現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • C語言軟件spi虛擬總線中間層設(shè)計(jì)詳解

    C語言軟件spi虛擬總線中間層設(shè)計(jì)詳解

    這篇文章主要為大家介紹了C語言軟件spi虛擬總線中間層設(shè)計(jì)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級詳解

    C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級詳解

    這篇文章主要介紹了C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • C語言數(shù)據(jù)結(jié)構(gòu)線性表教程示例詳解

    C語言數(shù)據(jù)結(jié)構(gòu)線性表教程示例詳解

    這篇文章主要為大家介紹了C語言數(shù)據(jù)結(jié)構(gòu)線性表的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • c++支持coroutine的簡單示例

    c++支持coroutine的簡單示例

    這篇文章主要介紹了c++支持coroutine的簡單示例,使用的是linux 平臺做的,需要的朋友可以參考下
    2014-03-03

最新評論