hdr_imaging in opencv3 with VS2015. Assertion failed (!images.empty())
I am trying to run the HDR processing code distributed with opencv3.2.0. The process fails with the following error
OpenCV Error: Assertion failed (!images.empty()) in cv::checkImageDimensions, file C:\build\master_winpack-build-win64-vc14\opencv\modules\photo\src\hdr_common.cpp, line 51
I have read previous answers related to this error, but I am not able to get past this problem. images is a vector of png images. I have verified that the vector is not empty. I have tried using absolute and relative paths for command line input. I have also tried sending an empty vector of images. The error is the same. Here is my code with debug statements followed by the output. Thanks in advance for any help.
#include <opencv2/photo.hpp>
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui.hpp>
#include <vector>
#include <iostream>
#include <fstream>
using namespace cv;
using namespace std;
void loadExposureSeq(String, vector<Mat>&, vector<float>&);
int main(int, char**argv)
{
vector<Mat> images;
vector<float> times;
loadExposureSeq(argv[1], images, times);
cout << "images.isempty=" << images.empty() << " size=" << images.size() << endl;
Mat response;
cout << "Calling createCalibrateDebevec" << endl;
Ptr<CalibrateDebevec> calibrate = createCalibrateDebevec();
cout << "Calling calibrate.process" << endl;
calibrate->process(images, response, times);
cout << "Back from calibrate.process" << endl;
Mat hdr;
cout << "Calling createMergeDebevec" << endl;
Ptr<MergeDebevec> merge_debevec = createMergeDebevec();
merge_debevec->process(images, hdr, times, response);
Mat ldr;
cout << "Calling createTonemapDurand" << endl;
Ptr<TonemapDurand> tonemap = createTonemapDurand(2.2f);
tonemap->process(hdr, ldr);
Mat fusion;
cout << "Calling createMergeMertens" << endl;
Ptr<MergeMertens> merge_mertens = createMergeMertens();
merge_mertens->process(images, fusion);
imwrite("fusion.png", fusion * 255);
imwrite("ldr.png", ldr * 255);
imwrite("hdr.hdr", hdr);
return 0;
}
void loadExposureSeq(String path, vector<Mat>& images, vector<float>& times)
{
path = path + std::string("/");
ifstream list_file((path + "list.txt").c_str());
string name;
float val;
cout << ((path + "list.txt").c_str()) << endl;
while (list_file >> name >> val) {
cout << "name=" << name << " val=" << val << " " << (path + name) << endl;
Mat img = imread(path + name);
cout << "img.size=" << img.dims<< endl;
images.push_back(img);
times.push_back(1 / val);
}
for (int i = 0; i < images.size(); i++) {
int width = images[i].cols;
int height = images[i].rows;
int type = images[i].type();
float tt = times[i];
cout << "width, height, type, time=" << width << " " << height << " " << type << " " << tt << endl;
}
list_file.close();
}
$ ./CannyStill1.exe c://SSAD//forHDRTest
c://SSAD//forHDRTest/list.txt
name=9_1_HDR-227-3.png val=227 c://SSAD//forHDRTest/9_1_HDR-227-3.png
img.size=2
name=9_1_HDR-454-0.png val=454 c://SSAD//forHDRTest/9_1_HDR-454-0.png
img.size=2
name=9_1_HDR-681-1.png val=681 c://SSAD//forHDRTest/9_1_HDR-681-1.png
img.size=2
width, height, type, time=1288 964 16 0.00440529
width, height, type, time=1288 964 16 0.00220264
width, height, type, time=1288 964 16 0.00146843
images.isempty=0 size=3
Calling createCalibrateDebevec
Calling calibrate.process
OpenCV Error: Assertion failed (!images.empty()) in cv::checkImageDimensions, file C:\build\master_winpack-build-win64-vc14\opencv\modules\photo\src\hdr_common.cpp, line 51
$ ./CannyStill1.exe .
*./list.txt
name=9_1_HDR-227-3.png val=227 ./9_1_HDR-227-3.png
img.size=2
name=9_1_HDR-454-0.png val=454 ./9_1_HDR-454-0.png
img.size=2
name=9_1_HDR-681-1.png val=681 ...
May be a problem with your post why have you got two // at this line :
PS Please use icon with 101010 to format your code