如何加载多个图像以使用 opencv 进行处理?

Posted

技术标签:

【中文标题】如何加载多个图像以使用 opencv 进行处理?【英文标题】:How to load multiple images for processing with opencv? 【发布时间】:2013-11-30 03:54:56 【问题描述】:

我有一个 OpenCV C++ 代码,我必须应用到二十个或更多图像。现在我在一个一个调试,每次都改个镜像的名字。有没有一种方法可以让我调用所有图像并将它们提交到该进程并保存所有图像?

我正在使用这个:

Mat input_image = imread("img1.jpg");

用于加载图像。还有这个:

imwrite("output_image.jpg", output_image);

用于将图像保存在我的项目文件夹中。


更新:

我这样做了,但没有用:

int main(int argc, char **argv)

    char name[50];
    int i=0;
    Mat output_image;

    while(1)

        sprintf(name, "cam%d.jpg", i);

        //Load the image
        Mat input_image = imread(name, 1);
        if(!input_image.data) break;

        //Image RGB to Grayscale
        cvtColor(input_image, output_image, CV_RGB2GRAY);

        //Applying Gaussian
        GaussianBlur(output_image, output_image, Size(21.0, 21.0), 50.0);

        //applying adaptive threshold
        adaptiveThreshold(output_image, output_image, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY_INV, 111, -20);

        sprintf(name,"cam%d-bin.jpg",i);

        //save the image
        imwrite(name, output_image);

        i++;


    


【问题讨论】:

你可以循环执行.. 你试过我写的吗? 【参考方案1】:

你可以试试下面的代码。假设您的图像名称如 img0.jpg、img1.jpg、img2.jpg 等...

char name[10];
int i=0;
Mat gray;
while(1)  

    sprintf(name,"img%d.jpg",i);
    Mat src= imread(name,1);
     if(!src.data ) break;

     cvtColor(src,gray,CV_BGR2GRAY);
     sprintf(name,"gray%d.jpg",i);
     imwrite(name, gray);

    imshow("src",src);
    imshow("result",gray);

    i++;
    waitKey();

【讨论】:

请检查我的更新。我试过你说的,但没有用。我做错了什么? 你确定图片在当前目录吗?【参考方案2】:

试试这个,

const char* DATASET("D:/Data/input_image_directory/");
const int total_images = 20;

int main(int argc, char** argv)

    std::string file_directory;
    int count;

    if (argc > 1)
    
        file_directory = argv[1];
        count = argv[2];
    
    else
    
        file_directory = DATASET->c_str();
        count = total_images;
    

    for (int i=0; i<count; ++i)
    
        // This is assuming your file names are in the structure image000.png, image001.png,...
        cv::Mat input_Mat = cv::imread( cv::format( "%s/image%03d.png", file_directory, i ), CV_LOAD_IMAGE_ANYCOLOR );
        cv::namedWindow ("input_image", CV_WINDOW_AUTOSIZE);
        cv::imshow( "input_image", input_Mat);

        // Do processing
        // Some more processing
    

    return EXIT_SUCCESS;

【讨论】:

以上是关于如何加载多个图像以使用 opencv 进行处理?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用opencv在ios中编写一个简单的图像加载函数

番外1. OpenCV 图像处理之图片加载与视频加载

番外1. OpenCV 图像处理之图片加载与视频加载

如何使用Python和OpenCV进行多处理?

OpenCV实战——OpenCV与图像处理

使用OpenCV进行图像全景拼接