如何从open cv中的文件夹中读取多个图像(使用C)

时间:2014-03-25 07:41:06

标签: c opencv

我是新手,打开CV和C.如何为同一种操作指定多个图像。

2 个答案:

答案 0 :(得分:6)

如果您的图像(按顺序)编号,您可以使用VideoCapture滥用隐藏的功能,只需将其传递给(格式)字符串:

VideoCapture cap("/my/folder/p%05d.jpg"); // would work with: "/my/folder/p00013.jpg", etc
while( cap.isOpened() )
{
    Mat img;
    cap.read(img);
    // process(img);
}

答案 1 :(得分:0)

OpenCV不为此提供任何功能。您可以使用第三方lib从文件系统中读取文件。如果您的图像按顺序编号,您可以使用@berak技术但如果您的文件不是顺序的,那么使用可以使用 boost :: filesystem (沉重和我最喜欢的)来读取文件。或 dirent.h (仅限小型,单个标题)库。
以下代码使用dirent.h进行此作业

#include <iostream>
#include <opencv2\opencv.hpp>
#include "dirent.h"
int main(int argc, char* argv[])
{

    std::string inputDirectory = "D:\\inputImages";
    std::string outputDirectory = "D:\\outputImages";
    DIR *directory = opendir (inputDirectory.c_str());
    struct dirent *_dirent = NULL;
    if(directory == NULL)
    {
        printf("Cannot open Input Folder\n");
        return 1;
    }
    while((_dirent = readdir(directory)) != NULL)
    {
        std::string fileName = inputDirectory + "\\" +std::string(_dirent->d_name);
        cv::Mat rawImage = cv::imread(fileName.c_str());
        if(rawImage.data == NULL)
        {
            printf("Cannot Open Image\n");
            continue;
        }
        // Add your any image filter here
        fileName = outputDirectory + "\\" + std::string(_dirent->d_name);
        cv::imwrite(fileName.c_str(), rawImage);
    }
    closedir(directory);
}