2015-06-18 1 views
3

Есть ли способ чтения в наборе изображений из файла, все из которых имеют разные имена друг другу, т. Е. Нет непрерывности вообще?C++ чтение в изображении с разными именами файлов без жесткого кодирования

Так что, если у вас 4 изображения в той же папке с именами файлов из:

  1. head.jpg
  2. shoulders.png
  3. knees.tiff
  4. toes.bmp

Без жесткого кодирования имен файлов напрямую, поэтому вы можете изменить shoulders.png сказать arms.gif, есть способ их загрузки?

я в настоящее время OpenCV и увеличить доступный

+0

если изменить ** shoulders.png ** до ** arms.gif **, вы по-прежнему необходимо знаете, какую часть тела он представляет? или вам просто нужно загрузить каждый файл изображения, расположенный в данном каталоге? –

+2

с boost (или dirent.h из Интернета) вы можете получить список всех имен файлов в определенной папке. Вы можете перебрать все эти имена файлов, а затем попытаться загрузить имя файла с opencv (imread) и проверить, можно ли загрузить изображение (mat.empty() может быть неверным после загрузки). если изображение может быть загружено, это изображение, если оно не просто просто проигнорировало этот файл. – Micka

+0

Cheers sehe, но если бы я знал, как бы я не спросил. Имена файлов в вопросе произвольны. Спасибо @ Мика, я посмотрю. – MLMLTL

ответ

2

Для кого-то еще интересно:

#include <boost/filesystem.hpp> 
namespace fs = boost::filesystem; 
std::vector<cv::Mat> imageVec; 
fs::path p ("."); 
fs::directory_iterator end_itr; 
// cycle through the directory 
for (fs::directory_iterator itr(p); itr != end_itr; ++itr){ 
    // If it's not a directory, list it. If you want to list directories too, just remove this check. 
    if (fs::is_regular_file(itr->path())) { 
     if (fs::is_regular_file(itr->path())){ 
      cv::Mat img; 
      img = cv::imread(itr->path().string()); 
      if(img.data) imagesVecc.push_back(img); 
     } 
     // assign current file name to current_file and echo it out to the console. 
     std::string current_file = itr->path().string(); 
     std::cout << current_file << std::endl; 
    } 
} 
+1

Молодцы. У меня была рамка, но у меня не было опыта с Gil/OpenCV :) (Если бы вы поняли, что вам не нужна помощь, вы бы скорее ответили) – sehe

Смежные вопросы