OpenCV 应用读取文件路径与文件名批量处理图片

在应用opencv大量测试图片时,需要对图片批量的读入并进行处理。之前处理这个问题时是使用这种方法:把待处理的图片放到一个文件夹内,全选它们然后重命名1,这样系统会自动给他们全部重命名为1(1),1(2),1(3)等等等
然后用下面的代码把图片读进来:

for ( i=1;i<=624;i++)
    {
    sprintf_s(adr, "C:\Users\Administrator\Desktop\第二组截图\1 (%d).jpg",i);
    Mat g_SrcImage;
    g_SrcImage=imread(adr);
    printf("i=%d",i);
    }

这种方法很麻烦,需要手动重命名一遍,然后根据文件夹下的图片个数确定循环中的值。
最近找到了一个简单一点的方法,遍历文件夹内所有图片的路径,名称和总个数。通用性好一点。

using namespace std;
using namespace cv; 

Mat g_SrcImage;
int main()
{
    void getFiles( string path, vector<string>& files);
    char * filePath = "D:\images";  
    vector<string> files;  
    getFiles(filePath, files );  
    int number = files.size();  
    printf("图片个数为%d\n",number);
    for (int i = 0;i < number;i++)  
    {  
        cout<<files[i].c_str()<<endl;  
        g_SrcImage=imread(files[i].c_str());
        imshow("11",g_SrcImage);
        waitKey(500);
    }  
    getchar();
}

void getFiles( string path, vector<string>& files )  
{  
    long   hFile   =   0;  
    struct _finddata_t fileinfo;  
    string p;  
    if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) !=  -1)  
    {  
        do  
        {  
            if((fileinfo.attrib &  _A_SUBDIR))  
            {  
                if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)  
                    getFiles( p.assign(path).append("\\").append(fileinfo.name), files );  
            }  
            else  
            {  
                files.push_back(p.assign(path).append("\\").append(fileinfo.name) );  
            }  
        }while(_findnext(hFile, &fileinfo)  == 0);  

        _findclose(hFile);  
    }  
} 

你可能感兴趣的:(opencv)