45
#ifndef OPENCV_CORE_SATURATE_HPP
46
#define OPENCV_CORE_SATURATE_HPP
48
#include "opencv2/core/cvdef.h"
49
#include "opencv2/core/fast_math.hpp"
80
template<
typename
_Tp>
static
inline
_Tp
saturate_cast(uchar v) {
return
_Tp(v); }
82
template<
typename
_Tp>
static
inline
_Tp
saturate_cast(schar v) {
return
_Tp(v); }
84
template<
typename
_Tp>
static
inline
_Tp
saturate_cast(ushort v) {
return
_Tp(v); }
86
template<
typename
_Tp>
static
inline
_Tp
saturate_cast(
short
v) {
return
_Tp(v); }
88
template<
typename
_Tp>
static
inline
_Tp
saturate_cast(
unsigned
v) {
return
_Tp(v); }
90
template<
typename
_Tp>
static
inline
_Tp
saturate_cast(
int
v) {
return
_Tp(v); }
92
template<
typename
_Tp>
static
inline
_Tp
saturate_cast(
float
v) {
return
_Tp(v); }
94
template<
typename
_Tp>
static
inline
_Tp
saturate_cast(
double
v) {
return
_Tp(v); }
96
template<
typename
_Tp>
static
inline
_Tp
saturate_cast(int64 v) {
return
_Tp(v); }
98
template<
typename
_Tp>
static
inline
_Tp
saturate_cast(uint64 v) {
return
_Tp(v); }
100
template<>
inline
uchar saturate_cast<uchar>(schar v) {
return
(uchar)
std::max((
int)v, 0); }
101
template<>
inline
uchar saturate_cast<uchar>(ushort v) {
return
(uchar)
std::min((
unsigned)v, (
unsigned)UCHAR_MAX); }
102
template<>
inline
uchar saturate_cast<uchar>(
int
v) {
return
(uchar)((unsigned)v <= UCHAR_MAX ? v : v > 0 ? UCHAR_MAX : 0); }
103
template<>
inline
uchar saturate_cast<uchar>(
short
v) {
return
saturate_cast<uchar>((
int)v); }
104
template<>
inline
uchar saturate_cast<uchar>(
unsigned
v) {
return
(uchar)
std::min(v, (
unsigned)UCHAR_MAX); }
105
template<>
inline
uchar saturate_cast<uchar>(
float
v) {
int
iv =
cvRound(v);
return
saturate_cast<uchar>(iv); }
106
template<>
inline
uchar saturate_cast<uchar>(
double
v) {
int
iv =
cvRound(v);
return
saturate_cast<uchar>(iv); }
107
template<>
inline
uchar saturate_cast<uchar>(int64 v) {
return
(uchar)((uint64)v <= (uint64)UCHAR_MAX ? v : v > 0 ? UCHAR_MAX : 0); }
108
template<>
inline
uchar saturate_cast<uchar>(uint64 v) {
return
(uchar)
std::min(v, (uint64)UCHAR_MAX); }
110
template<>
inline
schar saturate_cast<schar>(uchar v) {
return
(schar)
std::min((
int)v, SCHAR_MAX); }
111
template<>
inline
schar saturate_cast<schar>(ushort v) {
return
(schar)
std::min((
unsigned)v, (
unsigned)SCHAR_MAX); }
112
template<>
inline
schar saturate_cast<schar>(
int
v) {
return
(schar)((unsigned)(v-SCHAR_MIN) <= (unsigned)UCHAR_MAX ? v : v > 0 ? SCHAR_MAX : SCHAR_MIN); }
113
template<>
inline
schar saturate_cast<schar>(
short
v) {
return
saturate_cast<schar>((
int)v); }
114
template<>
inline
schar saturate_cast<schar>(
unsigned
v) {
return
(schar)
std::min(v, (
unsigned)SCHAR_MAX); }
115
template<>
inline
schar saturate_cast<schar>(
float
v) {
int
iv =
cvRound(v);
return
saturate_cast<schar>(iv); }
116
template<>
inline
schar saturate_cast<schar>(
double
v) {
int
iv =
cvRound(v);
return
saturate_cast<schar>(iv); }
117
template<>
inline
schar saturate_cast<schar>(int64 v) {
return
(schar)((uint64)((int64)v-SCHAR_MIN) <= (uint64)UCHAR_MAX ? v : v > 0 ? SCHAR_MAX : SCHAR_MIN); }
118
template<>
inline
schar saturate_cast<schar>(uint64 v) {
return
(schar)
std::min(v, (uint64)SCHAR_MAX); }
120
template<>
inline
ushort saturate_cast<ushort>(schar v) {
return
(ushort)
std::max((
int)v, 0); }
121
template<>
inline
ushort saturate_cast<ushort>(
short
v) {
return
(ushort)
std::max((
int)v, 0); }
122
template<>
inline
ushort saturate_cast<ushort>(
int
v) {
return
(ushort)((unsigned)v <= (
unsigned)USHRT_MAX ? v : v > 0 ? USHRT_MAX : 0); }
123
template<>
inline
ushort saturate_cast<ushort>(
unsigned
v) {
return
(ushort)
std::min(v, (
unsigned)USHRT_MAX); }
124
template<>
inline
ushort saturate_cast<ushort>(
float
v) {
int
iv =
cvRound(v);
return
saturate_cast<ushort>(iv); }
125
template<>
inline
ushort saturate_cast<ushort>(
double
v) {
int
iv =
cvRound(v);
return
saturate_cast<ushort>(iv); }
126
template<>
inline
ushort saturate_cast<ushort>(int64 v) {
return
(ushort)((uint64)v <= (uint64)USHRT_MAX ? v : v > 0 ? USHRT_MAX : 0); }
127
template<>
inline
ushort saturate_cast<ushort>(uint64 v) {
return
(ushort)
std::min(v, (uint64)USHRT_MAX); }
129
template<>
inline
short
saturate_cast<short>(ushort v) {
return
(
short)
std::min((
int)v, SHRT_MAX); }
130
template<>
inline
short
saturate_cast<short>(
int
v) {
return
(
short)((unsigned)(v - SHRT_MIN) <= (unsigned)USHRT_MAX ? v : v > 0 ? SHRT_MAX : SHRT_MIN); }
131
template<>
inline
short
saturate_cast<short>(
unsigned
v) {
return
(
short)
std::min(v, (
unsigned)SHRT_MAX); }
132
template<>
inline
short
saturate_cast<short>(
float
v) {
int
iv =
cvRound(v);
return
saturate_cast<short>(iv); }
133
template<>
inline
short
saturate_cast<short>(
double
v) {
int
iv =
cvRound(v);
return
saturate_cast<short>(iv); }
134
template<>
inline
short
saturate_cast<short>(int64 v) {
return
(
short)((uint64)((int64)v - SHRT_MIN) <= (uint64)USHRT_MAX ? v : v > 0 ? SHRT_MAX : SHRT_MIN); }
135
template<>
inline
short
saturate_cast<short>(uint64 v) {
return
(
short)
std::min(v, (uint64)SHRT_MAX); }
137
template<>
inline
int
saturate_cast<int>(
unsigned
v) {
return
(
int)
std::min(v, (
unsigned)INT_MAX); }
138
template<>
inline
int
saturate_cast<int>(int64 v) {
return
(
int)((uint64)(v - INT_MIN) <= (uint64)UINT_MAX ? v : v > 0 ? INT_MAX : INT_MIN); }
139
template<>
inline
int
saturate_cast<int>(uint64 v) {
return
(
int)
std::min(v, (uint64)INT_MAX); }
140
template<>
inline
int
saturate_cast<int>(
float
v) {
return
cvRound(v); }
141
template<>
inline
int
saturate_cast<int>(
double
v) {
return
cvRound(v); }
143
template<>
inline
unsigned
saturate_cast<unsigned>(schar v) {
return
(
unsigned)
std::max(v, (schar)0); }
144
template<>
inline
unsigned
saturate_cast<unsigned>(
short
v) {
return
(
unsigned)
std::max(v, (
short)0); }
145
template<>
inline
unsigned
saturate_cast<unsigned>(
int
v) {
return
(
unsigned)
std::max(v, (
int)0); }
146
template<>
inline
unsigned
saturate_cast<unsigned>(int64 v) {
return
(
unsigned)((uint64)v <= (uint64)UINT_MAX ? v : v > 0 ? UINT_MAX : 0); }
147
template<>
inline
unsigned
saturate_cast<unsigned>(uint64 v) {
return
(
unsigned)
std::min(v, (uint64)UINT_MAX); }
149
template<>
inline
unsigned
saturate_cast<unsigned>(
float
v) {
return
static_cast<
unsigned
>(
cvRound(v)); }
150
template<>
inline
unsigned
saturate_cast<unsigned>(
double
v) {
return
static_cast<
unsigned
>(
cvRound(v)); }
152
template<>
inline
uint64 saturate_cast<uint64>(schar v) {
return
(uint64)
std::max(v, (schar)0); }
153
template<>
inline
uint64 saturate_cast<uint64>(
short
v) {
return
(uint64)
std::max(v, (
short)0); }
154
template<>
inline
uint64 saturate_cast<uint64>(
int
v) {
return
(uint64)
std::max(v, (
int)0); }
155
template<>
inline
uint64 saturate_cast<uint64>(int64 v) {
return
(uint64)
std::max(v, (int64)0); }
157
template<>
inline
int64 saturate_cast<int64>(uint64 v) {
return
(int64)
std::min(v, (uint64)LLONG_MAX); }
160
template<
typename
_Tp>
static
inline
_Tp
saturate_cast(float16_t v) {
return
saturate_cast<_Tp>((
float)v); }
164
template<>
inline
float16_t saturate_cast<float16_t>(uchar v) {
return
float16_t((
float)v); }
165
template<>
inline
float16_t saturate_cast<float16_t>(schar v) {
return
float16_t((
float)v); }
166
template<>
inline
float16_t saturate_cast<float16_t>(ushort v) {
return
float16_t((
float)v); }
167
template<>
inline
float16_t saturate_cast<float16_t>(
short
v) {
return
float16_t((
float)v); }
168
template<>
inline
float16_t saturate_cast<float16_t>(
unsigned
v){
return
float16_t((
float)v); }
169
template<>
inline
float16_t saturate_cast<float16_t>(
int
v) {
return
float16_t((
float)v); }
170
template<>
inline
float16_t saturate_cast<float16_t>(uint64 v) {
return
float16_t((
float)v); }
171
template<>
inline
float16_t saturate_cast<float16_t>(int64 v) {
return
float16_t((
float)v); }
172
template<>
inline
float16_t saturate_cast<float16_t>(
float
v) {
return
float16_t(v); }
173
template<>
inline
float16_t saturate_cast<float16_t>(
double
v) {
return
float16_t((
float)v); }
CV_EXPORTS_W void max(InputArray src1, InputArray src2, OutputArray dst)
Calculates per-element maximum of two arrays or an array and a scalar.
CV_EXPORTS_W void min(InputArray src1, InputArray src2, OutputArray dst)
Calculates per-element minimum of two arrays or an array and a scalar.
CV_INLINE int cvRound(double value)
Rounds floating-point number to the nearest integer
Definition:
fast_math.hpp:200
static _Tp saturate_cast(uchar v)
Template function for accurate conversion from one primitive type to another.
Definition:
saturate.hpp:80
"black box" representation of the file storage associated with a file on disk.
Definition:
aruco.hpp:75