簡體   English   中英

如何在OpenCV中獲取視頻的幀饋送?

[英]How to get frame feed of a video in OpenCV?

我需要從OpenCV獲取視頻的幀饋送。 我的代碼運行良好,但我需要獲得它在每ms處理的幀。

我在Linux上使用cmake。

我的代碼:

#include "cv.h"
#include "highgui.h"

using namespace cv;

int main(int, char**)
{
    VideoCapture cap(0); // open the default camera

Mat frame;
    namedWindow("feed",1);
    for(;;)
{
    Mat frame;
    cap >> frame;   // get a new frame from camera
    imshow("feed", frame);
    if(waitKey(1) >= 0) break;
}
    return 0;
}

我假設你想存儲幀。 我建議使用std :: vector (如GPPK 推薦的那樣 )。 std::vector允許您動態創建數組。 push_back(Mat())函數將一個空的Mat對象添加到向量的末尾,而back()函數返回數組中的最后一個元素(允許cap寫入它)。

代碼如下所示:

#include "cv.h"
#include "highgui.h"

using namespace cv;

#include <vector>
using namespace std; //Usually not recommended, but you're doing this with cv anyway

int main(int, char**)
{
    VideoCapture cap(0); // open the default camera

    vector<Mat> frame;
    namedWindow("feed",1);
    for(;;)
    {
        frame.push_back(Mat());
        cap >> frame.back();   // get a new frame from camera
        imshow("feed", frame);
        // Usually recommended to wait for 30ms
        if(waitKey(30) >= 0) break;
    }
    return 0;
}

請注意,您可以像這樣快速填充RAM。 例如,如果你每30ms抓取640x480 RGB幀,你將在70s左右達到2GB的RAM。

std::vector是一個非常有用的知識容器,如果您不熟悉,我建議您查看一個教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM