5 # ifndef VCCC_TYPE_SUPPORT_OPENCV_CV_POINT_HPP
6 # define VCCC_TYPE_SUPPORT_OPENCV_CV_POINT_HPP
9 # include <type_traits>
12 # include "opencv2/opencv.hpp"
21 struct get_cv_point<0> {
22 template<
typename T>
static constexpr T&
get( cv::Point_<T>& p) noexcept {
return p.x; }
23 template<
typename T>
static constexpr
const T&
get(
const cv::Point_<T>& p) noexcept {
return p.x; }
24 template<
typename T>
static constexpr T&&
get( cv::Point_<T>&& p) noexcept {
return std::move(p.x); }
25 template<
typename T>
static constexpr
const T&&
get(
const cv::Point_<T>&& p) noexcept {
return std::move(p.x); }
27 template<
typename T>
static constexpr T&
get( cv::Point3_<T>& p) noexcept {
return p.x; }
28 template<
typename T>
static constexpr
const T&
get(
const cv::Point3_<T>& p) noexcept {
return p.x; }
29 template<
typename T>
static constexpr T&&
get( cv::Point3_<T>&& p) noexcept {
return std::move(p.x); }
30 template<
typename T>
static constexpr
const T&&
get(
const cv::Point3_<T>&& p) noexcept {
return std::move(p.x); }
34 struct get_cv_point<1> {
35 template<
typename T>
static constexpr T&
get( cv::Point_<T>& p) noexcept {
return p.y; }
36 template<
typename T>
static constexpr
const T&
get(
const cv::Point_<T>& p) noexcept {
return p.y; }
37 template<
typename T>
static constexpr T&&
get( cv::Point_<T>&& p) noexcept {
return std::move(p.y); }
38 template<
typename T>
static constexpr
const T&&
get(
const cv::Point_<T>&& p) noexcept {
return std::move(p.y); }
40 template<
typename T>
static constexpr T&
get( cv::Point3_<T>& p) noexcept {
return p.y; }
41 template<
typename T>
static constexpr
const T&
get(
const cv::Point3_<T>& p) noexcept {
return p.y; }
42 template<
typename T>
static constexpr T&&
get( cv::Point3_<T>&& p) noexcept {
return std::move(p.y); }
43 template<
typename T>
static constexpr
const T&&
get(
const cv::Point3_<T>&& p) noexcept {
return std::move(p.y); }
47 struct get_cv_point<2> {
48 template<
typename T>
static constexpr T&
get( cv::Point3_<T>& p) noexcept {
return p.z; }
49 template<
typename T>
static constexpr
const T&
get(
const cv::Point3_<T>& p) noexcept {
return p.z; }
50 template<
typename T>
static constexpr T&&
get( cv::Point3_<T>&& p) noexcept {
return std::move(p.z); }
51 template<
typename T>
static constexpr
const T&&
get(
const cv::Point3_<T>&& p) noexcept {
return std::move(p.z); }
67 struct tuple_size<cv::Point_<T>> : std::integral_constant<size_t, 2> {};
71 struct tuple_size<cv::Point3_<T>> : std::integral_constant<size_t, 3> {};
83 template<
typename T>
struct tuple_element<0, cv::Point_<T>> {
using type = T; };
84 template<
typename T>
struct tuple_element<1, cv::Point_<T>> {
using type = T; };
92 template<
typename T>
struct tuple_element<0, cv::Point3_<T>> {
using type = T; };
93 template<
typename T>
struct tuple_element<1, cv::Point3_<T>> {
using type = T; };
94 template<
typename T>
struct tuple_element<2, cv::Point3_<T>> {
using type = T; };
108 template<std::
size_t i,
typename T>
109 constexpr
inline tuple_element_t<i, cv::Point_<T>>&
110 get(cv::Point_<T>& p) noexcept {
114 template<std::
size_t i,
typename T>
115 constexpr
inline const tuple_element_t<i, cv::Point_<T>>&
116 get(
const cv::Point_<T>& p) noexcept {
120 template<std::
size_t i,
typename T>
121 constexpr
inline tuple_element_t<i, cv::Point_<T>>&&
122 get(cv::Point_<T>&& p) noexcept {
126 template<std::
size_t i,
typename T>
127 constexpr
inline const tuple_element_t<i, cv::Point_<T>>&&
128 get(
const cv::Point_<T>&& p) noexcept {
138 template<std::
size_t i,
typename T>
139 constexpr
inline tuple_element_t<i, cv::Point3_<T>>&
140 get(cv::Point3_<T>& p) noexcept {
144 template<std::
size_t i,
typename T>
145 constexpr
inline const tuple_element_t<i, cv::Point3_<T>>&
146 get(
const cv::Point3_<T>& p) noexcept {
150 template<std::
size_t i,
typename T>
151 constexpr
inline tuple_element_t<i, cv::Point3_<T>>&&
152 get(cv::Point3_<T>&& p) noexcept {
156 template<std::
size_t i,
typename T>
157 constexpr
inline const tuple_element_t<i, cv::Point3_<T>>&&
158 get(
const cv::Point3_<T>&& p) noexcept {
171 template<
typename T,
typename N>
172 cv::Point_<T>
add(
const cv::Point_<T>& point2, N n) {
173 return cv::Point_<T>(point2.x + n, point2.y + n);
176 template<
typename T,
typename N>
177 inline cv::Point3_<T>
add(
const cv::Point3_<T>& point3, N n) {
178 return cv::Point3_<T>(point3.x + n, point3.y + n, point3.z + n);
183 template<
int new_size,
typename T, std::enable_if_t<new_size == 2,
int> = 0>
188 template<
int new_size,
typename T, std::enable_if_t<new_size==3,
int> = 0>
189 auto resize(
const cv::Point_<T>& from) {
190 return cv::Point3_<T>(from.x, from.y, 0);
193 template<
int new_size,
typename T, std::enable_if_t<new_size == 2,
int> = 0>
194 inline auto resize(
const cv::Point3_<T>& from){
195 return cv::Point_<T>(from.x, from.y);
198 template<
int new_size,
typename T, std::enable_if_t<new_size == 3,
int> = 0>
199 inline auto resize(
const cv::Point3_<T>& from){
constexpr const tuple_element_t< i, cv::Point3_< T > > && get(const cv::Point3_< T > &&p) noexcept
Definition: cv_point.hpp:158
constexpr variant_alternative_t< I, variant< Types... > > & get(variant< Types... > &v)
Definition: variant.hpp:770
Definition: matrix.hpp:495
constexpr std::enable_if_t<(I< m *n), typename vccc::Matrix< T, m, n >::value_type & > get(vccc::Matrix< T, m, n > &matrix)
Definition: matrix.hpp:499
Definition: directory.h:12
auto resize(const cv::Point_< T > &from)
Definition: cv_point.hpp:184
cv::Matx< T, m, n > add(const cv::Matx< T, m, n > &matx, N n_)
Definition: cv_mat.hpp:150
T type
Definition: cv_point.hpp:92
T type
Definition: cv_point.hpp:83
T type
Definition: cv_point.hpp:93
T type
Definition: cv_point.hpp:84
T type
Definition: cv_point.hpp:94