Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
util.hpp
00001 /*M/////////////////////////////////////////////////////////////////////////////////////// 00002 // 00003 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 00004 // 00005 // By downloading, copying, installing or using the software you agree to this license. 00006 // If you do not agree to this license, do not download, install, 00007 // copy or use the software. 00008 // 00009 // 00010 // License Agreement 00011 // For Open Source Computer Vision Library 00012 // 00013 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. 00014 // Copyright (C) 2009, Willow Garage Inc., all rights reserved. 00015 // Third party copyrights are property of their respective owners. 00016 // 00017 // Redistribution and use in source and binary forms, with or without modification, 00018 // are permitted provided that the following conditions are met: 00019 // 00020 // * Redistribution's of source code must retain the above copyright notice, 00021 // this list of conditions and the following disclaimer. 00022 // 00023 // * Redistribution's in binary form must reproduce the above copyright notice, 00024 // this list of conditions and the following disclaimer in the documentation 00025 // and/or other materials provided with the distribution. 00026 // 00027 // * The name of the copyright holders may not be used to endorse or promote products 00028 // derived from this software without specific prior written permission. 00029 // 00030 // This software is provided by the copyright holders and contributors "as is" and 00031 // any express or implied warranties, including, but not limited to, the implied 00032 // warranties of merchantability and fitness for a particular purpose are disclaimed. 00033 // In no event shall the Intel Corporation or contributors be liable for any direct, 00034 // indirect, incidental, special, exemplary, or consequential damages 00035 // (including, but not limited to, procurement of substitute goods or services; 00036 // loss of use, data, or profits; or business interruption) however caused 00037 // and on any theory of liability, whether in contract, strict liability, 00038 // or tort (including negligence or otherwise) arising in any way out of 00039 // the use of this software, even if advised of the possibility of such damage. 00040 // 00041 //M*/ 00042 00043 #ifndef __OPENCV_STITCHING_UTIL_HPP__ 00044 #define __OPENCV_STITCHING_UTIL_HPP__ 00045 00046 #include <list> 00047 #include "opencv2/core.hpp" 00048 00049 #ifndef ENABLE_LOG 00050 #define ENABLE_LOG 0 00051 #endif 00052 00053 // TODO remove LOG macros, add logging class 00054 #if ENABLE_LOG 00055 #ifdef ANDROID 00056 #include <iostream> 00057 #include <sstream> 00058 #include <android/log.h> 00059 #define LOG_STITCHING_MSG(msg) \ 00060 do { \ 00061 Stringstream _os; \ 00062 _os << msg; \ 00063 __android_log_print(ANDROID_LOG_DEBUG, "STITCHING", "%s", _os.str().c_str()); \ 00064 } while(0); 00065 #else 00066 #include <iostream> 00067 #define LOG_STITCHING_MSG(msg) for(;;) { std::cout << msg; std::cout.flush(); break; } 00068 #endif 00069 #else 00070 #define LOG_STITCHING_MSG(msg) 00071 #endif 00072 00073 #define LOG_(_level, _msg) \ 00074 for(;;) \ 00075 { \ 00076 using namespace std; \ 00077 if ((_level) >= ::cv::detail::stitchingLogLevel()) \ 00078 { \ 00079 LOG_STITCHING_MSG(_msg); \ 00080 } \ 00081 break; \ 00082 } 00083 00084 00085 #define LOG(msg) LOG_(1, msg) 00086 #define LOG_CHAT(msg) LOG_(0, msg) 00087 00088 #define LOGLN(msg) LOG(msg << std::endl) 00089 #define LOGLN_CHAT(msg) LOG_CHAT(msg << std::endl) 00090 00091 //#if DEBUG_LOG_CHAT 00092 // #define LOG_CHAT(msg) LOG(msg) 00093 // #define LOGLN_CHAT(msg) LOGLN(msg) 00094 //#else 00095 // #define LOG_CHAT(msg) do{}while(0) 00096 // #define LOGLN_CHAT(msg) do{}while(0) 00097 //#endif 00098 00099 namespace cv { 00100 namespace detail { 00101 00102 //! @addtogroup stitching 00103 //! @{ 00104 00105 class CV_EXPORTS DisjointSets 00106 { 00107 public: 00108 DisjointSets(int elem_count = 0) { createOneElemSets(elem_count); } 00109 00110 void createOneElemSets(int elem_count); 00111 int findSetByElem(int elem); 00112 int mergeSets(int set1, int set2); 00113 00114 std::vector<int> parent; 00115 std::vector<int> size; 00116 00117 private: 00118 std::vector<int> rank_; 00119 }; 00120 00121 00122 struct CV_EXPORTS GraphEdge 00123 { 00124 GraphEdge(int from, int to, float weight); 00125 bool operator <(const GraphEdge& other) const { return weight < other.weight; } 00126 bool operator >(const GraphEdge& other) const { return weight > other.weight; } 00127 00128 int from, to; 00129 float weight; 00130 }; 00131 00132 inline GraphEdge::GraphEdge(int _from, int _to, float _weight) : from(_from), to(_to), weight(_weight) {} 00133 00134 00135 class CV_EXPORTS Graph 00136 { 00137 public: 00138 Graph(int num_vertices = 0) { create(num_vertices); } 00139 void create(int num_vertices) { edges_.assign(num_vertices, std::list<GraphEdge>()); } 00140 int numVertices() const { return static_cast<int>(edges_.size()); } 00141 void addEdge(int from, int to, float weight); 00142 template <typename B> B forEach(B body) const; 00143 template <typename B> B walkBreadthFirst(int from, B body) const; 00144 00145 private: 00146 std::vector< std::list<GraphEdge> > edges_; 00147 }; 00148 00149 00150 ////////////////////////////////////////////////////////////////////////////// 00151 // Auxiliary functions 00152 00153 CV_EXPORTS bool overlapRoi(Point tl1, Point tl2, Size sz1, Size sz2, Rect &roi); 00154 CV_EXPORTS Rect resultRoi(const std::vector<Point> &corners, const std::vector<UMat> &images); 00155 CV_EXPORTS Rect resultRoi(const std::vector<Point> &corners, const std::vector<Size> &sizes); 00156 CV_EXPORTS Rect resultRoiIntersection(const std::vector<Point> &corners, const std::vector<Size> &sizes); 00157 CV_EXPORTS Point resultTl(const std::vector<Point> &corners); 00158 00159 // Returns random 'count' element subset of the {0,1,...,size-1} set 00160 CV_EXPORTS void selectRandomSubset(int count, int size, std::vector<int> &subset); 00161 00162 CV_EXPORTS int& stitchingLogLevel(); 00163 00164 //! @} 00165 00166 } // namespace detail 00167 } // namespace cv 00168 00169 #include "util_inl.hpp" 00170 00171 #endif // __OPENCV_STITCHING_UTIL_HPP__ 00172
Generated on Tue Jul 12 2022 16:42:40 by
1.7.2