4

VideoCapture我正在尝试使用 OpenCV 的功能从文件夹中读取一系列图像。在网上搜索了一下,我现在的代码是这样的:

cv::VideoCapture cap ( "C:\\Users\\Admin\\Documents\\Images\\%02d.jpg");

我期待看到该VideoCapture函数应该读取该文件夹中具有两个序列号名称的所有图像,例如01.jpg, 02.jpg, ..., 30.jpg. 有人在互联网上告诉VideoCapture我,一旦我给出第一张图像的位置和名称,该功能应该可以捕捉所有这些图像。所以我也尝试这样做:

cv::VideoCapture cap ("C:\\Users\\Admin\\Documents\\Images\\01.jpg");

但这仍然行不通,至少不适用于我这里的情况。这些图像大小不同,因此我将首先阅读它们,调整它们的大小,然后对它们进行进一步处理。我怎样才能做到这一点?我正在使用带有 VisualStudio 的 Windows7。谢谢你。

4

4 回答 4

5

根据我的经验,即使不指定格式,VideoCapture 也可以读取一系列图像。例如,以下工作正常:

std::string pathToData("cap_00000000.bmp");
cv::VideoCapture sequence(pathToData);

图像被顺序读取:

Mat image;
sequence >> image; // Reads cap_00000001.bmp

但是:这仅适用于图像位于可执行文件的文件夹中的情况。我想不出这样指定一个目录:

std::string pathToData("c:\\path\\cap_00000000.bmp");
std::string pathToData("c://path//cap_00000000.bmp");
// etc.

似乎是一个错误。一个官方的例子可以在这里找到:

http://kevinhughes.ca/tutorials/reading-image-sequences-with-opencv/ https://github.com/Itseez/opencv/pull/823/files

于 2013-10-08T11:28:05.213 回答
4

根据此链接,它需要是:

cv::VideoCapture cap("C:/Users/Admin/Documents/Images/%2d.jpg");
                      ^^^                             ^^^

即,在和:之后仅一个单个,用于 2 位文件名序列。C%2d

同样,您的第二个示例可能应该是:

cv::VideoCapture cap("C:/Users/Admin/Documents/Images/01.jpg");
                      ^^^
于 2013-05-23T12:00:37.690 回答
1

在 glob(folderpath, vectorOfimages) 中使用 glob,然后将每个图像作为 vectorOfimages[i] 访问。

vectorOfimages 是

 vector<String>

并且文件夹路径是一个字符串。

于 2015-03-24T07:37:08.213 回答
0

我们需要这样声明

VideoCapture vcap("C:\\pathDirectory\\folderName\\drop%d.bmp");

我这样声明,对我来说效果很好,因为我的图像名称是 drop1.bmp、drop2.bmp、drop3.bmp ……等等

于 2015-06-12T21:18:00.990 回答