mirror of
https://github.com/opencv/opencv.git
synced 2026-07-29 23:33:05 +04:00
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
This commit is contained in:
@@ -372,6 +372,14 @@ public:
|
||||
Vec(const Vec<_Tp, cn>& v);
|
||||
|
||||
static Vec all(_Tp alpha);
|
||||
static Vec ones();
|
||||
static Vec randn(_Tp a, _Tp b);
|
||||
static Vec randu(_Tp a, _Tp b);
|
||||
static Vec zeros();
|
||||
#ifdef CV_CXX11
|
||||
static Vec diag(_Tp alpha) = delete;
|
||||
static Vec eye() = delete;
|
||||
#endif
|
||||
|
||||
//! per-element multiplication
|
||||
Vec mul(const Vec<_Tp, cn>& v) const;
|
||||
@@ -1053,6 +1061,18 @@ Vec<_Tp, cn> Vec<_Tp, cn>::all(_Tp alpha)
|
||||
return v;
|
||||
}
|
||||
|
||||
template<typename _Tp, int cn> inline
|
||||
Vec<_Tp, cn> Vec<_Tp, cn>::ones()
|
||||
{
|
||||
return Vec::all(1);
|
||||
}
|
||||
|
||||
template<typename _Tp, int cn> inline
|
||||
Vec<_Tp, cn> Vec<_Tp, cn>::zeros()
|
||||
{
|
||||
return Vec::all(0);
|
||||
}
|
||||
|
||||
template<typename _Tp, int cn> inline
|
||||
Vec<_Tp, cn> Vec<_Tp, cn>::mul(const Vec<_Tp, cn>& v) const
|
||||
{
|
||||
|
||||
@@ -230,6 +230,22 @@ Matx<_Tp,m,n> Matx<_Tp,m,n>::randn(_Tp a, _Tp b)
|
||||
return M;
|
||||
}
|
||||
|
||||
template<typename _Tp, int cn> inline
|
||||
Vec<_Tp, cn> Vec<_Tp, cn>::randu(_Tp a, _Tp b)
|
||||
{
|
||||
Vec<_Tp,cn> V;
|
||||
cv::randu(V, Scalar(a), Scalar(b));
|
||||
return V;
|
||||
}
|
||||
|
||||
template<typename _Tp, int cn> inline
|
||||
Vec<_Tp, cn> Vec<_Tp, cn>::randn(_Tp a, _Tp b)
|
||||
{
|
||||
Vec<_Tp,cn> V;
|
||||
cv::randn(V, Scalar(a), Scalar(b));
|
||||
return V;
|
||||
}
|
||||
|
||||
template<typename _Tp, int m, int n> inline
|
||||
Matx<_Tp, n, m> Matx<_Tp, m, n>::inv(int method, bool *p_is_ok /*= NULL*/) const
|
||||
{
|
||||
|
||||
@@ -324,6 +324,7 @@ VSX_IMPL_1RG(vec_udword2, vec_float4, xvcvspuxds, vec_ctulo)
|
||||
#define VSX_IMPL_CONVERT(rt, rg, fnm) \
|
||||
VSX_FINLINE(rt) fnm(const rg& a) { return __builtin_convertvector(a, rt); }
|
||||
|
||||
#ifndef vec_permi
|
||||
#if __clang_major__ < 5
|
||||
// implement vec_permi in a dirty way
|
||||
# define VSX_IMPL_CLANG_4_PERMI(Tvec) \
|
||||
@@ -351,12 +352,14 @@ VSX_FINLINE(rt) fnm(const rg& a) { return __builtin_convertvector(a, rt); }
|
||||
// vec_xxpermdi is missing little-endian supports in clang 4 just like gcc4
|
||||
# define vec_permi(a, b, c) vec_xxpermdi(b, a, (3 ^ (((c) & 1) << 1 | (c) >> 1)))
|
||||
#endif // __clang_major__ < 5
|
||||
#endif
|
||||
|
||||
// shift left double by word immediate
|
||||
#ifndef vec_sldw
|
||||
# define vec_sldw vec_xxsldwi
|
||||
#endif
|
||||
|
||||
#if __clang_major__ < 13
|
||||
// Implement vec_rsqrt since clang only supports vec_rsqrte
|
||||
#ifndef vec_rsqrt
|
||||
VSX_FINLINE(vec_float4) vec_rsqrt(const vec_float4& a)
|
||||
@@ -380,6 +383,7 @@ VSX_FINLINE(vec_udword2) vec_promote(unsigned long long a, int b)
|
||||
ret[b & 1] = a;
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
// vec_popcnt should return unsigned but clang has different thought just like gcc in vec_vpopcnt
|
||||
#define VSX_IMPL_POPCNTU(Tvec, Tvec2, ucast) \
|
||||
|
||||
@@ -270,6 +270,9 @@ void cartToPolar( InputArray src1, InputArray src2,
|
||||
{
|
||||
CV_INSTRUMENT_REGION();
|
||||
|
||||
CV_Assert(src1.getObj() != dst1.getObj() && src1.getObj() != dst2.getObj() &&
|
||||
src2.getObj() != dst1.getObj() && src2.getObj() != dst2.getObj());
|
||||
|
||||
CV_OCL_RUN(dst1.isUMat() && dst2.isUMat(),
|
||||
ocl_cartToPolar(src1, src2, dst1, dst2, angleInDegrees))
|
||||
|
||||
@@ -564,6 +567,9 @@ void polarToCart( InputArray src1, InputArray src2,
|
||||
{
|
||||
CV_INSTRUMENT_REGION();
|
||||
|
||||
CV_Assert(src1.getObj() != dst1.getObj() && src1.getObj() != dst2.getObj() &&
|
||||
src2.getObj() != dst1.getObj() && src2.getObj() != dst2.getObj());
|
||||
|
||||
int type = src2.type(), depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type);
|
||||
CV_Assert((depth == CV_32F || depth == CV_64F) && (src1.empty() || src1.type() == type));
|
||||
|
||||
|
||||
@@ -2620,5 +2620,36 @@ TEST(Core_Magnitude, regression_19506)
|
||||
}
|
||||
}
|
||||
|
||||
TEST(Core_CartPolar, inplace)
|
||||
{
|
||||
RNG& rng = TS::ptr()->get_rng();
|
||||
cv::Mat1d A[2] = {cv::Mat1d(10, 10), cv::Mat1d(10, 10)};
|
||||
cv::Mat1d B[2], C[2];
|
||||
cv::UMat uA[2];
|
||||
|
||||
for(int i = 0; i < 2; ++i)
|
||||
{
|
||||
cvtest::randUni(rng, A[i], Scalar::all(-1000), Scalar::all(1000));
|
||||
A[i].copyTo(uA[i]);
|
||||
}
|
||||
|
||||
// Reverse
|
||||
cv::cartToPolar(A[0], A[1], B[0], B[1], false);
|
||||
cv::polarToCart(B[0], B[1], C[0], C[1], false);
|
||||
EXPECT_MAT_NEAR(A[0], C[0], 2);
|
||||
EXPECT_MAT_NEAR(A[1], C[1], 2);
|
||||
|
||||
// Inplace
|
||||
EXPECT_THROW(cv::polarToCart(B[0], B[1], B[0], B[1], false), cv::Exception);
|
||||
EXPECT_THROW(cv::polarToCart(B[0], B[1], B[1], B[0], false), cv::Exception);
|
||||
EXPECT_THROW(cv::cartToPolar(A[0], A[1], A[0], A[1], false), cv::Exception);
|
||||
EXPECT_THROW(cv::cartToPolar(A[0], A[1], A[1], A[0], false), cv::Exception);
|
||||
// Inplace OCL
|
||||
EXPECT_THROW(cv::polarToCart(uA[0], uA[1], uA[0], uA[1]), cv::Exception);
|
||||
EXPECT_THROW(cv::polarToCart(uA[0], uA[1], uA[1], uA[0]), cv::Exception);
|
||||
EXPECT_THROW(cv::cartToPolar(uA[0], uA[1], uA[0], uA[1]), cv::Exception);
|
||||
EXPECT_THROW(cv::cartToPolar(uA[0], uA[1], uA[0], uA[1]), cv::Exception);
|
||||
|
||||
}
|
||||
|
||||
}} // namespace
|
||||
|
||||
@@ -2371,6 +2371,18 @@ TEST(Mat, ptrVecni_20044)
|
||||
EXPECT_EQ(int(6), *(ci));
|
||||
}
|
||||
|
||||
|
||||
TEST(Mat, VecMatx_4650)
|
||||
{
|
||||
// Makes sure the following compiles.
|
||||
cv::Vec3b a;
|
||||
a = cv::Vec3b::ones();
|
||||
a = cv::Vec3b::zeros();
|
||||
a = cv::Vec3b::randn(0, 10);
|
||||
a = cv::Vec3b::randu(0, 10);
|
||||
}
|
||||
|
||||
|
||||
TEST(Mat, reverse_iterator_19967)
|
||||
{
|
||||
// empty iterator (#16855)
|
||||
@@ -2449,4 +2461,5 @@ TEST(Mat, reverse_iterator_19967)
|
||||
|
||||
}
|
||||
|
||||
|
||||
}} // namespace
|
||||
|
||||
Reference in New Issue
Block a user