我想使用 openCV 从任何文件夹中读取一系列帧。所有帧都是按顺序排列的,即 (1).jpg,(2).jpg,.... 我试过了
VideoCapture cap;
cap.open("Directory/");
for(;;)
{
Mat frame;
cap >> frame;
}
但它不起作用。以前有人问过这个问题,但我不知道为什么这个答案对我不起作用。
我需要重命名图像吗?
我想使用 openCV 从任何文件夹中读取一系列帧。所有帧都是按顺序排列的,即 (1).jpg,(2).jpg,.... 我试过了
VideoCapture cap;
cap.open("Directory/");
for(;;)
{
Mat frame;
cap >> frame;
}
但它不起作用。以前有人问过这个问题,但我不知道为什么这个答案对我不起作用。
我需要重命名图像吗?
cap open 应该是cap.open("Directory/(%02d).jpg");
,你必须重命名你的图像,使它们看起来像(01).jpg
,(02).jpg
等等,以便它们具有固定的长度。如果图像是这样的,(001).jpg
那么你应该使用`cap.open("Directory/(%03d).jpg");
#include "opencv2/opencv.hpp"
using namespace cv;
int main()
{
VideoCapture cap;
cap.open("imgs/(%02d).jpg");
int i=0;
for(;;)
{
if(i++%37==0)cap=VideoCapture("imgs/(%02d).jpg");//there are 37 frames in the dir
Mat frame;
cap >> frame;
imshow("frame",frame);
if(waitKey(1)==27)
exit(0);
}
return 0;
}
尝试按照所需的顺序准备一个包含名称列表和图像路径的 xml/yaml 文件。然后将列表加载为向量或一些类似的结构,然后在循环中将它们一一打开。
这里完整的代码使用字符串连接的想法来读取名称为“frame00000.jpg, frame00001.jpg,.....,frame00010.jpg...) 的带有五个零的帧序列,就像 matlab 一样。
#include "stdafx.h"
#include <stdlib.h>
#include <math.h>
#include <opencv/cv.h> // include it to used Main OpenCV functions.
#include <opencv/highgui.h> //include it to use GUI functions.
using namespace std;
using namespace cv;
string intToStr(int i,string path){
string bla = "00000";
stringstream ss;
ss<<i;
string ret ="";
ss>>ret;
string name = bla.substr(0,bla.size()-ret.size());
name = path+name+ret+".jpg";
return name;
}
int main(int, char**)
{
string previous_window = "Previous frame";
string current_window = "Current frame ";
int i=0;
for(int i = 1 ; i< 10 ; i++)
{
Mat Current, Previous;
string Curr_name = intToStr(i,"D:/NU/Junior Scientist/Datasets/egtest04/frame");
string Prev_name = intToStr(i-1,"D:/NU/Junior Scientist/Datasets/egtest04/frame");
Current = imread(Curr_name,1);
Previous = imread(Prev_name,1);
namedWindow(current_window,WINDOW_AUTOSIZE);
namedWindow(current_window,WINDOW_AUTOSIZE);
imshow(current_window,Current);
imshow(previous_window,Previous);
waitKey(0);
}
}
其中“D:/NU/Junior Scientist/Datasets/egtest04/frame”是路径刺痛。