return new NoExposureCompensator();
if (type == OVERLAP)
return new OverlapExposureCompensator();
- if (type == SEGMENT)
- return new SegmentExposureCompensator();
CV_Error(CV_StsBadArg, "unsupported exposure compensation method");
return NULL;\r
}\r
\r
\r
+void ExposureCompensator::feed(const vector<Point> &corners, const vector<Mat> &images, \r
+ const vector<Mat> &masks)\r
+{\r
+ vector<pair<Mat,uchar> > level_masks;\r
+ for (size_t i = 0; i < masks.size(); ++i)\r
+ level_masks.push_back(make_pair(masks[i], 255));\r
+ feed(corners, images, level_masks);\r
+}\r
+\r
+\r
void OverlapExposureCompensator::feed(const vector<Point> &corners, const vector<Mat> &images, \r
- const vector<Mat> &masks)\r
+ const vector<pair<Mat,uchar> > &masks)\r
{\r
CV_Assert(corners.size() == images.size() && images.size() == masks.size());\r
\r
subimg1 = images[i](Rect(roi.tl() - corners[i], roi.br() - corners[i]));\r
subimg2 = images[j](Rect(roi.tl() - corners[j], roi.br() - corners[j]));\r
\r
- submask1 = masks[i](Rect(roi.tl() - corners[i], roi.br() - corners[i]));\r
- submask2 = masks[j](Rect(roi.tl() - corners[j], roi.br() - corners[j]));\r
- intersect = submask1 & submask2;\r
+ submask1 = masks[i].first(Rect(roi.tl() - corners[i], roi.br() - corners[i]));\r
+ submask2 = masks[j].first(Rect(roi.tl() - corners[j], roi.br() - corners[j]));\r
+ intersect = (submask1 == masks[i].second) & (submask2 == masks[j].second);\r
\r
N(i, j) = N(j, i) = countNonZero(intersect);\r
\r
}\r
}\r
\r
- solve(A, b, gains_);\r
+ solve(A, b, gains);\r
}\r
\r
\r
void OverlapExposureCompensator::apply(int index, Point /*corner*/, Mat &image, const Mat &/*mask*/)\r
{\r
- image *= gains_(index, 0);\r
+ image *= gains(index, 0);\r
}\r
-\r
-\r
-void SegmentExposureCompensator::feed(const vector<Point> &/*corners*/, const vector<Mat> &/*images*/, \r
- const vector<Mat> &/*masks*/)\r
-{\r
-}\r
-\r
-\r
-void SegmentExposureCompensator::apply(int /*index*/, Point /*corner*/, Mat &/*image*/, const Mat &/*mask*/)\r
-{\r
-}
\ No newline at end of file
enum { NO, OVERLAP, SEGMENT };
static cv::Ptr<ExposureCompensator> createDefault(int type);
+ void feed(const std::vector<cv::Point> &corners, const std::vector<cv::Mat> &images,
+ const std::vector<cv::Mat> &masks);
virtual void feed(const std::vector<cv::Point> &corners, const std::vector<cv::Mat> &images,
- const std::vector<cv::Mat> &masks) = 0;
+ const std::vector<std::pair<cv::Mat,uchar> > &masks) = 0;
virtual void apply(int index, cv::Point corner, cv::Mat &image, const cv::Mat &mask) = 0;
};
{
public:
void feed(const std::vector<cv::Point> &/*corners*/, const std::vector<cv::Mat> &/*images*/,
- const std::vector<cv::Mat> &/*masks*/) {};
+ const std::vector<std::pair<cv::Mat,uchar> > &/*masks*/) {};
void apply(int /*index*/, cv::Point /*corner*/, cv::Mat &/*image*/, const cv::Mat &/*mask*/) {};
};
{
public:
void feed(const std::vector<cv::Point> &corners, const std::vector<cv::Mat> &images,
- const std::vector<cv::Mat> &masks);
+ const std::vector<std::pair<cv::Mat,uchar> > &masks);
void apply(int index, cv::Point corner, cv::Mat &image, const cv::Mat &mask);
-private:
- cv::Mat_<double> gains_;
-};
-
-
-class SegmentExposureCompensator : public ExposureCompensator
-{
-public:
- void feed(const std::vector<cv::Point> &corners, const std::vector<cv::Mat> &images,
- const std::vector<cv::Mat> &masks);
- void apply(int index, cv::Point corner, cv::Mat &image, const cv::Mat &mask);
+ cv::Mat_<double> gains;
};
#endif // __OPENCV_EXPOSURE_COMPENSATE_HPP__
\ No newline at end of file
expos_comp_type = ExposureCompensator::NO;\r
else if (string(argv[i + 1]) == "overlap")\r
expos_comp_type = ExposureCompensator::OVERLAP;\r
- else if (string(argv[i + 1]) == "segment")\r
- expos_comp_type = ExposureCompensator::SEGMENT;\r
else\r
{\r
cout << "Bad exposure compensation method\n";\r
#include "cvconfig.h"\r
#endif\r
\r
+#include <vector>\r
+#include <algorithm>\r
+#include <utility>\r
#include "opencv2/core/core.hpp"\r
#include "opencv2/core/internal.hpp"\r
#include "opencv2/imgproc/imgproc.hpp"\r
-#include "gcgraph.hpp"\r
#include "opencv2/highgui/highgui.hpp"\r
#include "opencv2/features2d/features2d.hpp"\r
#include "opencv2/calib3d/calib3d.hpp"\r
#include "opencv2/gpu/gpu.hpp"\r
-#include <vector>\r
+#include "gcgraph.hpp"\r
\r
#endif\r