// This file is part of OpenCV project. // It is subject to the license terms in the LICENSE file found in the top-level directory // of this distribution and at http://opencv.org/license.html. // // Copyright (C) 2018 Intel Corporation #ifndef OPENCV_GAPI_TYPES_HPP #define OPENCV_GAPI_TYPES_HPP #include // std::max, std::min #include namespace cv { namespace gapi { namespace own { class Point { public: Point() = default; Point(int _x, int _y) : x(_x), y(_y) {}; int x = 0; int y = 0; }; class Rect { public: Rect() = default; Rect(int _x, int _y, int _width, int _height) : x(_x), y(_y), width(_width), height(_height) {}; #if !defined(GAPI_STANDALONE) Rect(const cv::Rect& other) : x(other.x), y(other.y), width(other.width), height(other.height) {}; inline Rect& operator=(const cv::Rect& other) { x = other.x; y = other.x; width = other.width; height = other.height; return *this; } #endif // !defined(GAPI_STANDALONE) int x = 0; //!< x coordinate of the top-left corner int y = 0; //!< y coordinate of the top-left corner int width = 0; //!< width of the rectangle int height = 0; //!< height of the rectangle }; inline bool operator==(const Rect& lhs, const Rect& rhs) { return lhs.x == rhs.x && lhs.y == rhs.y && lhs.width == rhs.width && lhs.height == rhs.height; } inline bool operator!=(const Rect& lhs, const Rect& rhs) { return !(lhs == rhs); } inline Rect& operator&=(Rect& lhs, const Rect& rhs) { int x1 = std::max(lhs.x, rhs.x); int y1 = std::max(lhs.y, rhs.y); lhs.width = std::min(lhs.x + lhs.width, rhs.x + rhs.width) - x1; lhs.height = std::min(lhs.y + lhs.height, rhs.y + rhs.height) - y1; lhs.x = x1; lhs.y = y1; if( lhs.width <= 0 || lhs.height <= 0 ) lhs = Rect(); return lhs; } inline const Rect operator&(const Rect& lhs, const Rect& rhs) { Rect result = lhs; return result &= rhs; } inline std::ostream& operator<<(std::ostream& o, const Rect& rect) { return o << "[" << rect.width << " x " << rect.height << " from (" << rect.x << ", " << rect.y << ")]"; } class Size { public: Size() = default; Size(int _width, int _height) : width(_width), height(_height) {}; #if !defined(GAPI_STANDALONE) Size(const cv::Size& other) : width(other.width), height(other.height) {}; inline Size& operator=(const cv::Size& rhs) { width = rhs.width; height = rhs.height; return *this; } #endif // !defined(GAPI_STANDALONE) int width = 0; int height = 0; }; inline Size& operator+=(Size& lhs, const Size& rhs) { lhs.width += rhs.width; lhs.height += rhs.height; return lhs; } inline bool operator==(const Size& lhs, const Size& rhs) { return lhs.width == rhs.width && lhs.height == rhs.height; } inline bool operator!=(const Size& lhs, const Size& rhs) { return !(lhs == rhs); } inline std::ostream& operator<<(std::ostream& o, const Size& s) { o << "[" << s.width << " x " << s.height << "]"; return o; } } // namespace own } // namespace gapi } // namespace cv #endif // OPENCV_GAPI_TYPES_HPP