// or tort (including negligence or otherwise) arising in any way out of\r
// the use of this software, even if advised of the possibility of such damage.\r
//\r
-//M*/
-#ifndef __OPENCV_STITCHING_UTIL_HPP__
-#define __OPENCV_STITCHING_UTIL_HPP__
-
-#include <list>
-#include "precomp.hpp"
-
-#define ENABLE_LOG 1
-
-#if ENABLE_LOG
- #include <iostream>
- #define LOG(msg) std::cout << msg;
-#else
- #define LOG(msg)
-#endif
-
-#define LOGLN(msg) LOG(msg << std::endl)
-
-
-class DjSets
-{
-public:
- DjSets(int n = 0) { create(n); }
-
- void create(int n);
- int find(int elem);
- int merge(int set1, int set2);
-
- std::vector<int> parent;
- std::vector<int> size;
-
-private:
- std::vector<int> rank_;
-};
-
-
-struct GraphEdge
-{
- GraphEdge(int from, int to, float weight)
- : from(from), to(to), weight(weight) {}
- bool operator <(const GraphEdge& other) const { return weight < other.weight; }
- bool operator >(const GraphEdge& other) const { return weight > other.weight; }
-
- int from, to;
- float weight;
-};
-
-
-class Graph
-{
-public:
- Graph(int num_vertices = 0) { create(num_vertices); }
- void create(int num_vertices) { edges_.assign(num_vertices, std::list<GraphEdge>()); }
- int numVertices() const { return static_cast<int>(edges_.size()); }
- void addEdge(int from, int to, float weight);
- template <typename B> B forEach(B body) const;
- template <typename B> B walkBreadthFirst(int from, B body) const;
-
-private:
- std::vector< std::list<GraphEdge> > edges_;
-};
-
-
-//////////////////////////////////////////////////////////////////////////////
-// Auxiliary functions
-
-bool overlapRoi(cv::Point tl1, cv::Point tl2, cv::Size sz1, cv::Size sz2, cv::Rect &roi);
-cv::Rect resultRoi(const std::vector<cv::Point> &corners, const std::vector<cv::Mat> &images);
-cv::Rect resultRoi(const std::vector<cv::Point> &corners, const std::vector<cv::Size> &sizes);
-cv::Point resultTl(const std::vector<cv::Point> &corners);
-
-
-#include "util_inl.hpp"
-
-#endif // __OPENCV_STITCHING_UTIL_HPP__
+//M*/\r
+#ifndef __OPENCV_STITCHING_UTIL_HPP__\r
+#define __OPENCV_STITCHING_UTIL_HPP__\r
+\r
+#include <list>\r
+#include "precomp.hpp"\r
+\r
+#define ENABLE_LOG 1\r
+\r
+#if ENABLE_LOG\r
+ #include <iostream>\r
+ #define LOG(msg) { std::cout << msg; std::cout.flush(); }\r
+#else\r
+ #define LOG(msg)\r
+#endif\r
+\r
+#define LOGLN(msg) LOG(msg << std::endl)\r
+\r
+\r
+class DjSets\r
+{\r
+public:\r
+ DjSets(int n = 0) { create(n); }\r
+\r
+ void create(int n);\r
+ int find(int elem);\r
+ int merge(int set1, int set2);\r
+\r
+ std::vector<int> parent;\r
+ std::vector<int> size;\r
+\r
+private:\r
+ std::vector<int> rank_;\r
+};\r
+\r
+\r
+struct GraphEdge\r
+{\r
+ GraphEdge(int from, int to, float weight) \r
+ : from(from), to(to), weight(weight) {}\r
+ bool operator <(const GraphEdge& other) const { return weight < other.weight; }\r
+ bool operator >(const GraphEdge& other) const { return weight > other.weight; }\r
+\r
+ int from, to;\r
+ float weight;\r
+};\r
+\r
+\r
+class Graph\r
+{\r
+public:\r
+ Graph(int num_vertices = 0) { create(num_vertices); }\r
+ void create(int num_vertices) { edges_.assign(num_vertices, std::list<GraphEdge>()); }\r
+ int numVertices() const { return static_cast<int>(edges_.size()); }\r
+ void addEdge(int from, int to, float weight);\r
+ template <typename B> B forEach(B body) const;\r
+ template <typename B> B walkBreadthFirst(int from, B body) const;\r
+ \r
+private:\r
+ std::vector< std::list<GraphEdge> > edges_;\r
+};\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////////////\r
+// Auxiliary functions\r
+\r
+bool overlapRoi(cv::Point tl1, cv::Point tl2, cv::Size sz1, cv::Size sz2, cv::Rect &roi);\r
+cv::Rect resultRoi(const std::vector<cv::Point> &corners, const std::vector<cv::Mat> &images);\r
+cv::Rect resultRoi(const std::vector<cv::Point> &corners, const std::vector<cv::Size> &sizes);\r
+cv::Point resultTl(const std::vector<cv::Point> &corners);\r
+\r
+\r
+#include "util_inl.hpp"\r
+\r
+#endif // __OPENCV_STITCHING_UTIL_HPP__\r