我需要从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;
}
答案 0 :(得分:3)
我假设您要存储帧。我建议std::vector(作为GPPK recommends)。 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
是一个非常有用的容器,如果您不熟悉,我建议您在其上查看tutorial。