5 # ifndef VCCC_TYPE_SUPPORT_OPENCV_CV_MAT_HPP
6 # define VCCC_TYPE_SUPPORT_OPENCV_CV_MAT_HPP
9 # include <type_traits>
12 # include "opencv2/opencv.hpp"
17 template<
size_t I,
typename CVMatX,
bool v>
18 struct tuple_element_impl;
20 template<
size_t I,
typename T,
int m,
int n>
21 struct tuple_element_impl<I, cv::Matx<T, m, n>, true> {
45 template<
typename T,
int m,
int n>
46 struct tuple_size<cv::Matx<T, m, n>> : std::integral_constant<size_t, m * n> {};
56 template<
size_t I,
typename T,
int m,
int n>
57 struct tuple_element<I, cv::Matx<T, m, n>> :
58 vccc::internal::tuple_element_impl<I, cv::Matx<T, m, n>, (I < m * n)> {};
71 template<std::size_t i, typename T, int m, int n>
72 constexpr inline tuple_element_t<i, cv::Matx<T, m, n>>&
73 get(cv::Matx<T, m, n>& matx) noexcept {
77 template<std::size_t i, typename T, int m, int n>
78 constexpr inline const tuple_element_t<i, cv::Matx<T, m, n>>&
79 get(const cv::Matx<T, m, n>& matx) noexcept {
83 template<std::size_t i, typename T, int m, int n>
84 constexpr inline tuple_element_t<i, cv::Matx<T, m, n>>&&
85 get(cv::Matx<T, m, n>&& matx) noexcept {
86 return std::move(matx(i));
89 template<std::size_t i, typename T, int m, int n>
90 constexpr inline const tuple_element_t<i, cv::Matx<T, m, n>>&&
91 get(const cv::Matx<T, m, n>&& matx) noexcept {
92 return std::move(matx(i));
113 template<std::size_t i, std::size_t j, typename T, int m, int n>
115 at(cv::Matx<T, m, n>& matx) {
116 static_assert(i < m && j < n, "Index out of bounds in vccc::at<> (cv::Matx)");
117 static_assert(m > 1 && n > 1, "Invalid size (cv::Matx)");
121 template<std::size_t i, std::size_t j, typename T, int m, int n>
122 constexpr inline const T&
123 at(const cv::Matx<T, m, n>& matx) {
124 static_assert(i < m && j < n, "Index out of bounds in vccc::at<> (const cv::Matx)");
125 static_assert(m > 1 && n > 1, "Invalid size (const cv::Matx)");
129 template<std::size_t i, std::size_t j, typename T, int m, int n>
131 at(cv::Matx<T, m, n>&& matx) {
132 static_assert(i < m && j < n, "Index out of bounds in vccc::at<> (cv::Matx&&)");
133 static_assert(m > 1 && n > 1, "Invalid size (cv::Matx&&)");
134 return std::move(matx(i, j));
137 template<std::size_t i, std::size_t j, typename T, int m, int n>
138 constexpr inline const T&&
139 at(const cv::Matx<T, m, n>&& matx) {
140 static_assert(i < m && j < n, "Index out of bounds in vccc::at<> (const cv::Matx&&)");
141 static_assert(m > 1 && n > 1, "Invalid size (const cv::Matx&&)");
142 return std::move(matx(i, j));
149 template<typename T, int m, int n, typename N>
150 cv::Matx<T, m, n> add(const cv::Matx<T, m, n>& matx, N n_)
152 return matx + cv::Matx<T, m, n>::all(n_);
Definition: matrix.hpp:495
Definition: directory.h:12