perf_hdr.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // This file is part of OpenCV project.
  2. // It is subject to the license terms in the LICENSE file found in the top-level directory
  3. // of this distribution and at http://opencv.org/license.html.
  4. #include "perf_precomp.hpp"
  5. namespace opencv_test
  6. {
  7. namespace
  8. {
  9. struct ExposureSeq
  10. {
  11. std::vector<Mat> images;
  12. std::vector<float> times;
  13. };
  14. ExposureSeq loadExposureSeq(const std::string& list_filename)
  15. {
  16. std::ifstream list_file(list_filename);
  17. EXPECT_TRUE(list_file.is_open());
  18. string name;
  19. float val;
  20. const String path(list_filename.substr(0, list_filename.find_last_of("\\/") + 1));
  21. ExposureSeq seq;
  22. while (list_file >> name >> val)
  23. {
  24. Mat img = imread(path + name);
  25. EXPECT_FALSE(img.empty()) << "Could not load input image " << path + name;
  26. seq.images.push_back(img);
  27. seq.times.push_back(1 / val);
  28. }
  29. list_file.close();
  30. return seq;
  31. }
  32. PERF_TEST(HDR, Mertens)
  33. {
  34. const ExposureSeq seq = loadExposureSeq(getDataPath("cv/hdr/exposures/list.txt"));
  35. Ptr<MergeMertens> merge = createMergeMertens();
  36. Mat result(seq.images.front().size(), seq.images.front().type());
  37. TEST_CYCLE() merge->process(seq.images, result);
  38. SANITY_CHECK_NOTHING();
  39. }
  40. PERF_TEST(HDR, Debevec)
  41. {
  42. const ExposureSeq seq = loadExposureSeq(getDataPath("cv/hdr/exposures/list.txt"));
  43. Ptr<MergeDebevec> merge = createMergeDebevec();
  44. Mat result(seq.images.front().size(), seq.images.front().type());
  45. TEST_CYCLE() merge->process(seq.images, result, seq.times);
  46. SANITY_CHECK_NOTHING();
  47. }
  48. PERF_TEST(HDR, Robertson)
  49. {
  50. const ExposureSeq seq = loadExposureSeq(getDataPath("cv/hdr/exposures/list.txt"));
  51. Ptr<MergeRobertson> merge = createMergeRobertson();
  52. Mat result(seq.images.front().size(), seq.images.front().type());
  53. TEST_CYCLE() merge->process(seq.images, result, seq.times);
  54. SANITY_CHECK_NOTHING();
  55. }
  56. } // namespace
  57. } // namespace opencv_test