Skip to content

Instantly share code, notes, and snippets.

@gylns
Last active June 14, 2016 08:36
Show Gist options
  • Save gylns/78a361e929c35c72f4f1c6c6afe636e2 to your computer and use it in GitHub Desktop.
Save gylns/78a361e929c35c72f4f1c6c6afe636e2 to your computer and use it in GitHub Desktop.
#include <queue>
#include <iostream>
#include <opencv2/opencv.hpp>
#include "dirent.h"
using namespace std;
using namespace cv;
int main(int, char** argv)
{
setlocale(LC_ALL, "");
DIR *dir = opendir(argv[1]);
dirent *ent = NULL;
queue<DIR *> dir_que;
dir_que.push(dir);
READ_IMAGE:
if (dir_que.size() == 0)
{
cout << "all files readed done!" << endl;
return 0;
}
dir = dir_que.front();
if (dir == NULL || (ent = readdir(dir)) == NULL)
{
if (dir)
closedir(dir);
dir_que.pop();
goto READ_IMAGE;
}
char dir_path[MAX_PATH];
size_t ret;
dirent_wcstombs_s(&ret, dir_path, PATH_MAX, dir->wdirp->patt, PATH_MAX);
dir_path[ret - 2] = '\0';
string path = dir_path;
path = path + "/" + ent->d_name;
if (ent->d_type == DT_DIR && strcmp(ent->d_name, ".") && strcmp(ent->d_name, ".."))
{
dir_que.push(opendir(path.c_str()));
goto READ_IMAGE;
}
else if (ent->d_type != DT_REG || (strstr(ent->d_name, ".jpg") == NULL))
goto READ_IMAGE;
PROCESS_IMAGE:
Mat img = imread(path);
/* more processing */
/* read next image */
goto READ_IMAGE;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment