如何从一个文件夹中读取多个图像打开cv(使用C)



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

如果你的图像是(顺序)编号,你可以滥用一个隐藏的功能与videoccapture,只需传递一个(格式)字符串:

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);
}

OpenCV没有为此提供任何功能。您可以使用第三方库从文件系统读取文件。如果您的图像是顺序编号的,您可以使用@berak技术,但如果您的文件不是顺序编号的,则可以使用boost::filesystem(重型和我最喜欢的)来读取文件。或者 direct .h(小,单头)库。
下面的代码将direct .h用于此作业

#include <iostream>
#include <opencv2opencv.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 Foldern");
        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 Imagen");
            continue;
        }
        // Add your any image filter here
        fileName = outputDirectory + "\" + std::string(_dirent->d_name);
        cv::imwrite(fileName.c_str(), rawImage);
    }
    closedir(directory);
}

相关内容

  • 没有找到相关文章

最新更新