简体   繁体   中英

how to access images in sequence using loop in openCV

Guys i ran into a problem regarding accessing images in sequential order. i have images whose names change with incrementing number ie cube_0.jpg, cube_1.jpg, .... and so on. Now i want to access each image one-by-one and show. Following is my code that i am playing with since 2-days and don't know how to handle this situation or what is wrong with this problem.

ostringstream s;

for (int fileNumber = 0; fileNumber<=40; fileNumber++)
        {
            s<<"\"cube_"<<fileNumber<<"\.jpg\""<<endl;  

            string fullfileName(s.str());
            images[i] = fullfileName;

        }


        stringstream ss;
        cout<<"file name"<<images[0]<<endl;

        for (int file = 0; file<41; file++)
        {

            string str = images[file];
            cout<<"str "<<str<<endl;
            img_raw = imread(ss.str(), 1); // load as color image           Error
            cout<<"Done"<<endl<<"size"<<img_raw.size();
            system("pause"); 

        }

This code runs fine till it gets reached to "img_raw = imread(ss.str())", now this line is basically hindering me from accessing file. Since imread requires "string& filename" therefore i performed stringstream operation but nothing is working!

Any help would be greatly appreciated!

There are a few errors.

Your stringstream ss is empty. You declared it but did not fill with any values. I am pretty sure you meant imread(str, 1); instead of imread(ss.str(), 1);

In the first for loop, you are continuously printing filenames to ostringstream, so it goes like this:

0: "cube_0.jpg\\"

1: "cube_0.jpg\\""cube_1.jpg\\"

2: "cube_0.jpg\\""cube_1.jpg\\""cube_2.jpg\\"

...

so the ostringstream just grows and grows. ostringstream needs to be declared in the loop to be cleared for every iteration.

Edited code:

string images[41];
Mat img_raw;

for (int fileNumber = 0; fileNumber < 41; fileNumber++)
{
    stringstream ss;
    ss << "\cube_" << fileNumber << "\.jpg" << endl;  

    string fullfileName;
    ss >> fullfileName;
    images[fileNumber] = fullfileName;
}

for (int file = 0; file < 41; file++)
{
    cout << "Loading " << images[file] << endl;
    img_raw = imread(images[file], 1);

    if (!img_raw.empty())
    {
        cout << "Successfully loaded " << images[file] << " with size " << img_raw.size() << endl; 
    } 
    else
    {
        cout << "Error loading file " << images[file] << endl;
    }

    system("pause"); 
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM