Skip to content

Commit 64ed1e5

Browse files
committed
Load different types of images.
1 parent dd774d0 commit 64ed1e5

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

src/io/database_io.cpp

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ namespace dest {
3838
const ImportParameters & opts,
3939
std::vector<float> *scaleFactors)
4040
{
41-
const bool isIMM = util::findFilesInDir(directory, "asf", true).size() > 0;
42-
const bool isIBUG = util::findFilesInDir(directory, "pts", true).size() > 0;
41+
const bool isIMM = util::findFilesInDir(directory, "asf", true, true).size() > 0;
42+
const bool isIBUG = util::findFilesInDir(directory, "pts", true, true).size() > 0;
4343

4444
if (isIMM) {
4545
bool ok = importIMMFaceDatabase(directory, rectangleFile, images, shapes, rects, opts, scaleFactors);
@@ -69,6 +69,20 @@ namespace dest {
6969
s *= factor;
7070
r *= factor;
7171
}
72+
73+
cv::Mat loadImageFromFilePrefix(const std::string &prefix) {
74+
const std::string extensions[] = { ".png", ".jpg", ".jpeg", ".bmp", ""};
75+
76+
cv::Mat img;
77+
const std::string *ext = extensions;
78+
79+
do {
80+
img = cv::imread(prefix + *ext, cv::IMREAD_GRAYSCALE);
81+
++ext;
82+
} while (*ext != "" && img.empty());
83+
84+
return img;
85+
}
7286

7387
void mirrorImageShapeAndRectVertically(cv::Mat &img,
7488
core::Shape &s,
@@ -214,7 +228,7 @@ namespace dest {
214228
std::vector<float> *scaleFactors)
215229
{
216230

217-
std::vector<std::string> paths = util::findFilesInDir(directory, "asf", true);
231+
std::vector<std::string> paths = util::findFilesInDir(directory, "asf", true, true);
218232
DEST_LOG("Loading IMM database. Found " << paths.size() << " candidate entries." << std::endl);
219233

220234
std::vector<core::Rect> loadedRects;
@@ -232,13 +246,12 @@ namespace dest {
232246
size_t initialSize = images.size();
233247

234248
for (size_t i = 0; i < paths.size(); ++i) {
235-
const std::string fileNameImg = paths[i] + ".jpg";
236-
const std::string fileNamePts = paths[i] + ".asf";
249+
const std::string fileNameAsf = paths[i] + ".asf";
237250

238251
core::Shape s;
239252
core::Rect r;
240-
bool asfOk = parseAsfFile(fileNamePts, s);
241-
cv::Mat cvImg = cv::imread(fileNameImg, cv::IMREAD_GRAYSCALE);
253+
bool asfOk = parseAsfFile(fileNameAsf, s);
254+
cv::Mat cvImg = loadImageFromFilePrefix(paths[i]);
242255

243256
if(asfOk && !cvImg.empty()) {
244257

@@ -405,7 +418,7 @@ namespace dest {
405418
std::vector<float> *scaleFactors)
406419
{
407420

408-
std::vector<std::string> paths = util::findFilesInDir(directory, "pts", true);
421+
std::vector<std::string> paths = util::findFilesInDir(directory, "pts", true, true);
409422
DEST_LOG("Loading ibug database. Found " << paths.size() << " candidate entries." << std::endl);
410423

411424
std::vector<core::Rect> loadedRects;
@@ -424,13 +437,12 @@ namespace dest {
424437
size_t initialSize = images.size();
425438

426439
for (size_t i = 0; i < paths.size(); ++i) {
427-
const std::string fileNameImg = paths[i] + ".jpg";
428440
const std::string fileNamePts = paths[i] + ".pts";
429441

430442
core::Shape s;
431443
core::Rect r;
432444
bool ptsOk = parsePtsFile(fileNamePts, s);
433-
cv::Mat cvImg = cv::imread(fileNameImg, cv::IMREAD_GRAYSCALE);
445+
cv::Mat cvImg = loadImageFromFilePrefix(paths[i]);
434446

435447
if(ptsOk && !cvImg.empty()) {
436448

0 commit comments

Comments
 (0)