mirror of
https://github.com/opencv/opencv.git
synced 2026-07-31 00:03:03 +04:00
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
This commit is contained in:
@@ -270,7 +270,7 @@ static void binary_op( InputArray _src1, InputArray _src2, OutputArray _dst,
|
||||
if( !haveScalar )
|
||||
{
|
||||
const Mat* arrays[] = { &src1, &src2, &dst, &mask, 0 };
|
||||
uchar* ptrs[4]{};
|
||||
uchar* ptrs[4] = {};
|
||||
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
size_t total = it.size, blocksize = total;
|
||||
@@ -306,7 +306,7 @@ static void binary_op( InputArray _src1, InputArray _src2, OutputArray _dst,
|
||||
else
|
||||
{
|
||||
const Mat* arrays[] = { &src1, &dst, &mask, 0 };
|
||||
uchar* ptrs[3]{};
|
||||
uchar* ptrs[3] = {};
|
||||
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
size_t total = it.size, blocksize = std::min(total, blocksize0);
|
||||
@@ -745,7 +745,7 @@ static void arithm_op(InputArray _src1, InputArray _src2, OutputArray _dst,
|
||||
if( !haveScalar )
|
||||
{
|
||||
const Mat* arrays[] = { &src1, &src2, &dst, &mask, 0 };
|
||||
uchar* ptrs[4]{};
|
||||
uchar* ptrs[4] = {};
|
||||
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
size_t total = it.size, blocksize = total;
|
||||
@@ -812,7 +812,7 @@ static void arithm_op(InputArray _src1, InputArray _src2, OutputArray _dst,
|
||||
else
|
||||
{
|
||||
const Mat* arrays[] = { &src1, &dst, &mask, 0 };
|
||||
uchar* ptrs[3]{};
|
||||
uchar* ptrs[3] = {};
|
||||
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
size_t total = it.size, blocksize = std::min(total, blocksize0);
|
||||
@@ -1240,7 +1240,7 @@ void cv::compare(InputArray _src1, InputArray _src2, OutputArray _dst, int op)
|
||||
if( !haveScalar )
|
||||
{
|
||||
const Mat* arrays[] = { &src1, &src2, &dst, 0 };
|
||||
uchar* ptrs[3]{};
|
||||
uchar* ptrs[3] = {};
|
||||
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
size_t total = it.size;
|
||||
@@ -1251,7 +1251,7 @@ void cv::compare(InputArray _src1, InputArray _src2, OutputArray _dst, int op)
|
||||
else
|
||||
{
|
||||
const Mat* arrays[] = { &src1, &dst, 0 };
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
size_t total = it.size, blocksize = std::min(total, blocksize0);
|
||||
@@ -1748,7 +1748,7 @@ void cv::inRange(InputArray _src, InputArray _lowerb,
|
||||
|
||||
const Mat* arrays_sc[] = { &src, &dst, 0 };
|
||||
const Mat* arrays_nosc[] = { &src, &dst, &lb, &ub, 0 };
|
||||
uchar* ptrs[4]{};
|
||||
uchar* ptrs[4] = {};
|
||||
|
||||
NAryMatIterator it(lbScalar && ubScalar ? arrays_sc : arrays_nosc, ptrs);
|
||||
size_t total = it.size, blocksize = std::min(total, blocksize0);
|
||||
|
||||
@@ -1347,7 +1347,7 @@ void cv::Mat::convertTo(OutputArray _dst, int _type, double alpha, double beta)
|
||||
else
|
||||
{
|
||||
const Mat* arrays[] = {&src, &dst, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
Size sz((int)(it.size*cn), 1);
|
||||
|
||||
@@ -1496,7 +1496,7 @@ void cv::convertFp16( InputArray _src, OutputArray _dst)
|
||||
else
|
||||
{
|
||||
const Mat* arrays[] = {&src, &dst, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
Size sz((int)(it.size*cn), 1);
|
||||
|
||||
|
||||
@@ -1775,7 +1775,7 @@ void cv::convertScaleAbs( InputArray _src, OutputArray _dst, double alpha, doubl
|
||||
else
|
||||
{
|
||||
const Mat* arrays[] = {&src, &dst, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
Size sz((int)it.size*cn, 1);
|
||||
|
||||
|
||||
@@ -306,7 +306,7 @@ void Mat::copyTo( OutputArray _dst ) const
|
||||
if( total() != 0 )
|
||||
{
|
||||
const Mat* arrays[] = { this, &dst };
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs, 2);
|
||||
size_t sz = it.size*elemSize();
|
||||
|
||||
@@ -399,7 +399,7 @@ void Mat::copyTo( OutputArray _dst, InputArray _mask ) const
|
||||
}
|
||||
|
||||
const Mat* arrays[] = { this, &dst, &mask, 0 };
|
||||
uchar* ptrs[3]{};
|
||||
uchar* ptrs[3] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
Size sz((int)(it.size*mcn), 1);
|
||||
|
||||
|
||||
+106
-170
@@ -25,51 +25,34 @@ static int countNonZero_(const T* src, int len )
|
||||
static int countNonZero8u( const uchar* src, int len )
|
||||
{
|
||||
int i=0, nz = 0;
|
||||
#if CV_SSE2
|
||||
if(USE_SSE2)//5x-6x
|
||||
#if CV_SIMD
|
||||
int len0 = len & -v_uint8::nlanes;
|
||||
v_uint8 v_zero = vx_setzero_u8();
|
||||
v_uint8 v_one = vx_setall_u8(1);
|
||||
|
||||
v_uint32 v_sum32 = vx_setzero_u32();
|
||||
while (i < len0)
|
||||
{
|
||||
__m128i v_zero = _mm_setzero_si128();
|
||||
__m128i sum = _mm_setzero_si128();
|
||||
|
||||
for (; i<=len-16; i+=16)
|
||||
v_uint16 v_sum16 = vx_setzero_u16();
|
||||
int j = i;
|
||||
while (j < std::min(len0, i + 65280 * v_uint16::nlanes))
|
||||
{
|
||||
__m128i r0 = _mm_loadu_si128((const __m128i*)(src+i));
|
||||
sum = _mm_add_epi32(sum, _mm_sad_epu8(_mm_sub_epi8(v_zero, _mm_cmpeq_epi8(r0, v_zero)), v_zero));
|
||||
v_uint8 v_sum8 = vx_setzero_u8();
|
||||
int k = j;
|
||||
for (; k < std::min(len0, j + 255 * v_uint8::nlanes); k += v_uint8::nlanes)
|
||||
v_sum8 += v_one & (vx_load(src + k) == v_zero);
|
||||
v_uint16 part1, part2;
|
||||
v_expand(v_sum8, part1, part2);
|
||||
v_sum16 += part1 + part2;
|
||||
j = k;
|
||||
}
|
||||
nz = i - _mm_cvtsi128_si32(_mm_add_epi32(sum, _mm_unpackhi_epi64(sum, sum)));
|
||||
v_uint32 part1, part2;
|
||||
v_expand(v_sum16, part1, part2);
|
||||
v_sum32 += part1 + part2;
|
||||
i = j;
|
||||
}
|
||||
#elif CV_NEON
|
||||
int len0 = len & -16, blockSize1 = (1 << 8) - 16, blockSize0 = blockSize1 << 6;
|
||||
uint32x4_t v_nz = vdupq_n_u32(0u);
|
||||
uint8x16_t v_zero = vdupq_n_u8(0), v_1 = vdupq_n_u8(1);
|
||||
const uchar * src0 = src;
|
||||
|
||||
while( i < len0 )
|
||||
{
|
||||
int blockSizei = std::min(len0 - i, blockSize0), j = 0;
|
||||
|
||||
while (j < blockSizei)
|
||||
{
|
||||
int blockSizej = std::min(blockSizei - j, blockSize1), k = 0;
|
||||
uint8x16_t v_pz = v_zero;
|
||||
|
||||
for( ; k <= blockSizej - 16; k += 16 )
|
||||
v_pz = vaddq_u8(v_pz, vandq_u8(vceqq_u8(vld1q_u8(src0 + k), v_zero), v_1));
|
||||
|
||||
uint16x8_t v_p1 = vmovl_u8(vget_low_u8(v_pz)), v_p2 = vmovl_u8(vget_high_u8(v_pz));
|
||||
v_nz = vaddq_u32(vaddl_u16(vget_low_u16(v_p1), vget_high_u16(v_p1)), v_nz);
|
||||
v_nz = vaddq_u32(vaddl_u16(vget_low_u16(v_p2), vget_high_u16(v_p2)), v_nz);
|
||||
|
||||
src0 += blockSizej;
|
||||
j += blockSizej;
|
||||
}
|
||||
|
||||
i += blockSizei;
|
||||
}
|
||||
|
||||
CV_DECL_ALIGNED(16) unsigned int buf[4];
|
||||
vst1q_u32(buf, v_nz);
|
||||
nz += i - saturate_cast<int>(buf[0] + buf[1] + buf[2] + buf[3]);
|
||||
nz = i - v_reduce_sum(v_sum32);
|
||||
v_cleanup();
|
||||
#endif
|
||||
for( ; i < len; i++ )
|
||||
nz += src[i] != 0;
|
||||
@@ -79,159 +62,112 @@ static int countNonZero8u( const uchar* src, int len )
|
||||
static int countNonZero16u( const ushort* src, int len )
|
||||
{
|
||||
int i = 0, nz = 0;
|
||||
#if CV_SSE2
|
||||
if (USE_SSE2)
|
||||
#if CV_SIMD
|
||||
int len0 = len & -v_int8::nlanes;
|
||||
v_uint16 v_zero = vx_setzero_u16();
|
||||
v_int8 v_one = vx_setall_s8(1);
|
||||
|
||||
v_int32 v_sum32 = vx_setzero_s32();
|
||||
while (i < len0)
|
||||
{
|
||||
__m128i v_zero = _mm_setzero_si128 ();
|
||||
__m128i sum = _mm_setzero_si128();
|
||||
|
||||
for ( ; i <= len - 8; i += 8)
|
||||
v_int16 v_sum16 = vx_setzero_s16();
|
||||
int j = i;
|
||||
while (j < std::min(len0, i + 32766 * v_int16::nlanes))
|
||||
{
|
||||
__m128i r0 = _mm_loadu_si128((const __m128i*)(src + i));
|
||||
sum = _mm_add_epi32(sum, _mm_sad_epu8(_mm_sub_epi8(v_zero, _mm_cmpeq_epi16(r0, v_zero)), v_zero));
|
||||
v_int8 v_sum8 = vx_setzero_s8();
|
||||
int k = j;
|
||||
for (; k < std::min(len0, j + 127 * v_int8::nlanes); k += v_int8::nlanes)
|
||||
v_sum8 += v_one & v_pack(v_reinterpret_as_s16(vx_load(src + k) == v_zero), v_reinterpret_as_s16(vx_load(src + k + v_uint16::nlanes) == v_zero));
|
||||
v_int16 part1, part2;
|
||||
v_expand(v_sum8, part1, part2);
|
||||
v_sum16 += part1 + part2;
|
||||
j = k;
|
||||
}
|
||||
|
||||
nz = i - (_mm_cvtsi128_si32(_mm_add_epi32(sum, _mm_unpackhi_epi64(sum, sum))) >> 1);
|
||||
src += i;
|
||||
v_int32 part1, part2;
|
||||
v_expand(v_sum16, part1, part2);
|
||||
v_sum32 += part1 + part2;
|
||||
i = j;
|
||||
}
|
||||
#elif CV_NEON
|
||||
int len0 = len & -8, blockSize1 = (1 << 15), blockSize0 = blockSize1 << 6;
|
||||
uint32x4_t v_nz = vdupq_n_u32(0u);
|
||||
uint16x8_t v_zero = vdupq_n_u16(0), v_1 = vdupq_n_u16(1);
|
||||
|
||||
while( i < len0 )
|
||||
{
|
||||
int blockSizei = std::min(len0 - i, blockSize0), j = 0;
|
||||
|
||||
while (j < blockSizei)
|
||||
{
|
||||
int blockSizej = std::min(blockSizei - j, blockSize1), k = 0;
|
||||
uint16x8_t v_pz = v_zero;
|
||||
|
||||
for( ; k <= blockSizej - 8; k += 8 )
|
||||
v_pz = vaddq_u16(v_pz, vandq_u16(vceqq_u16(vld1q_u16(src + k), v_zero), v_1));
|
||||
|
||||
v_nz = vaddq_u32(vaddl_u16(vget_low_u16(v_pz), vget_high_u16(v_pz)), v_nz);
|
||||
|
||||
src += blockSizej;
|
||||
j += blockSizej;
|
||||
}
|
||||
|
||||
i += blockSizei;
|
||||
}
|
||||
|
||||
CV_DECL_ALIGNED(16) unsigned int buf[4];
|
||||
vst1q_u32(buf, v_nz);
|
||||
nz += i - saturate_cast<int>(buf[0] + buf[1] + buf[2] + buf[3]);
|
||||
nz = i - v_reduce_sum(v_sum32);
|
||||
v_cleanup();
|
||||
#endif
|
||||
return nz + countNonZero_(src, len - i);
|
||||
return nz + countNonZero_(src + i, len - i);
|
||||
}
|
||||
|
||||
static int countNonZero32s( const int* src, int len )
|
||||
{
|
||||
int i = 0, nz = 0;
|
||||
#if CV_SSE2
|
||||
if (USE_SSE2)
|
||||
#if CV_SIMD
|
||||
int len0 = len & -v_int8::nlanes;
|
||||
v_int32 v_zero = vx_setzero_s32();
|
||||
v_int8 v_one = vx_setall_s8(1);
|
||||
|
||||
v_int32 v_sum32 = vx_setzero_s32();
|
||||
while (i < len0)
|
||||
{
|
||||
__m128i v_zero = _mm_setzero_si128 ();
|
||||
__m128i sum = _mm_setzero_si128();
|
||||
|
||||
for ( ; i <= len - 4; i += 4)
|
||||
v_int16 v_sum16 = vx_setzero_s16();
|
||||
int j = i;
|
||||
while (j < std::min(len0, i + 32766 * v_int16::nlanes))
|
||||
{
|
||||
__m128i r0 = _mm_loadu_si128((const __m128i*)(src + i));
|
||||
sum = _mm_add_epi32(sum, _mm_sad_epu8(_mm_sub_epi8(v_zero, _mm_cmpeq_epi32(r0, v_zero)), v_zero));
|
||||
v_int8 v_sum8 = vx_setzero_s8();
|
||||
int k = j;
|
||||
for (; k < std::min(len0, j + 127 * v_int8::nlanes); k += v_int8::nlanes)
|
||||
v_sum8 += v_one & v_pack(
|
||||
v_pack(vx_load(src + k ) == v_zero, vx_load(src + k + v_int32::nlanes) == v_zero),
|
||||
v_pack(vx_load(src + k + 2*v_int32::nlanes) == v_zero, vx_load(src + k + 3*v_int32::nlanes) == v_zero)
|
||||
);
|
||||
v_int16 part1, part2;
|
||||
v_expand(v_sum8, part1, part2);
|
||||
v_sum16 += part1 + part2;
|
||||
j = k;
|
||||
}
|
||||
|
||||
nz = i - (_mm_cvtsi128_si32(_mm_add_epi32(sum, _mm_unpackhi_epi64(sum, sum))) >> 2);
|
||||
src += i;
|
||||
v_int32 part1, part2;
|
||||
v_expand(v_sum16, part1, part2);
|
||||
v_sum32 += part1 + part2;
|
||||
i = j;
|
||||
}
|
||||
#elif CV_NEON
|
||||
int len0 = len & -8, blockSize1 = (1 << 15), blockSize0 = blockSize1 << 6;
|
||||
uint32x4_t v_nz = vdupq_n_u32(0u);
|
||||
int32x4_t v_zero = vdupq_n_s32(0.0f);
|
||||
uint16x8_t v_1 = vdupq_n_u16(1u), v_zerou = vdupq_n_u16(0u);
|
||||
|
||||
while( i < len0 )
|
||||
{
|
||||
int blockSizei = std::min(len0 - i, blockSize0), j = 0;
|
||||
|
||||
while (j < blockSizei)
|
||||
{
|
||||
int blockSizej = std::min(blockSizei - j, blockSize1), k = 0;
|
||||
uint16x8_t v_pz = v_zerou;
|
||||
|
||||
for( ; k <= blockSizej - 8; k += 8 )
|
||||
v_pz = vaddq_u16(v_pz, vandq_u16(vcombine_u16(vmovn_u32(vceqq_s32(vld1q_s32(src + k), v_zero)),
|
||||
vmovn_u32(vceqq_s32(vld1q_s32(src + k + 4), v_zero))), v_1));
|
||||
|
||||
v_nz = vaddq_u32(vaddl_u16(vget_low_u16(v_pz), vget_high_u16(v_pz)), v_nz);
|
||||
|
||||
src += blockSizej;
|
||||
j += blockSizej;
|
||||
}
|
||||
|
||||
i += blockSizei;
|
||||
}
|
||||
|
||||
CV_DECL_ALIGNED(16) unsigned int buf[4];
|
||||
vst1q_u32(buf, v_nz);
|
||||
nz += i - saturate_cast<int>(buf[0] + buf[1] + buf[2] + buf[3]);
|
||||
nz = i - v_reduce_sum(v_sum32);
|
||||
v_cleanup();
|
||||
#endif
|
||||
return nz + countNonZero_(src, len - i);
|
||||
return nz + countNonZero_(src + i, len - i);
|
||||
}
|
||||
|
||||
static int countNonZero32f( const float* src, int len )
|
||||
{
|
||||
int i = 0, nz = 0;
|
||||
#if CV_SSE2
|
||||
if (USE_SSE2)
|
||||
#if CV_SIMD
|
||||
int len0 = len & -v_int8::nlanes;
|
||||
v_float32 v_zero = vx_setzero_f32();
|
||||
v_int8 v_one = vx_setall_s8(1);
|
||||
|
||||
v_int32 v_sum32 = vx_setzero_s32();
|
||||
while (i < len0)
|
||||
{
|
||||
__m128 v_zero_f = _mm_setzero_ps();
|
||||
__m128i v_zero = _mm_setzero_si128 ();
|
||||
__m128i sum = _mm_setzero_si128();
|
||||
|
||||
for ( ; i <= len - 4; i += 4)
|
||||
v_int16 v_sum16 = vx_setzero_s16();
|
||||
int j = i;
|
||||
while (j < std::min(len0, i + 32766 * v_int16::nlanes))
|
||||
{
|
||||
__m128 r0 = _mm_loadu_ps(src + i);
|
||||
sum = _mm_add_epi32(sum, _mm_sad_epu8(_mm_sub_epi8(v_zero, _mm_castps_si128(_mm_cmpeq_ps(r0, v_zero_f))), v_zero));
|
||||
v_int8 v_sum8 = vx_setzero_s8();
|
||||
int k = j;
|
||||
for (; k < std::min(len0, j + 127 * v_int8::nlanes); k += v_int8::nlanes)
|
||||
v_sum8 += v_one & v_pack(
|
||||
v_pack(v_reinterpret_as_s32(vx_load(src + k ) == v_zero), v_reinterpret_as_s32(vx_load(src + k + v_float32::nlanes) == v_zero)),
|
||||
v_pack(v_reinterpret_as_s32(vx_load(src + k + 2*v_float32::nlanes) == v_zero), v_reinterpret_as_s32(vx_load(src + k + 3*v_float32::nlanes) == v_zero))
|
||||
);
|
||||
v_int16 part1, part2;
|
||||
v_expand(v_sum8, part1, part2);
|
||||
v_sum16 += part1 + part2;
|
||||
j = k;
|
||||
}
|
||||
|
||||
nz = i - (_mm_cvtsi128_si32(_mm_add_epi32(sum, _mm_unpackhi_epi64(sum, sum))) >> 2);
|
||||
src += i;
|
||||
v_int32 part1, part2;
|
||||
v_expand(v_sum16, part1, part2);
|
||||
v_sum32 += part1 + part2;
|
||||
i = j;
|
||||
}
|
||||
#elif CV_NEON
|
||||
int len0 = len & -8, blockSize1 = (1 << 15), blockSize0 = blockSize1 << 6;
|
||||
uint32x4_t v_nz = vdupq_n_u32(0u);
|
||||
float32x4_t v_zero = vdupq_n_f32(0.0f);
|
||||
uint16x8_t v_1 = vdupq_n_u16(1u), v_zerou = vdupq_n_u16(0u);
|
||||
|
||||
while( i < len0 )
|
||||
{
|
||||
int blockSizei = std::min(len0 - i, blockSize0), j = 0;
|
||||
|
||||
while (j < blockSizei)
|
||||
{
|
||||
int blockSizej = std::min(blockSizei - j, blockSize1), k = 0;
|
||||
uint16x8_t v_pz = v_zerou;
|
||||
|
||||
for( ; k <= blockSizej - 8; k += 8 )
|
||||
v_pz = vaddq_u16(v_pz, vandq_u16(vcombine_u16(vmovn_u32(vceqq_f32(vld1q_f32(src + k), v_zero)),
|
||||
vmovn_u32(vceqq_f32(vld1q_f32(src + k + 4), v_zero))), v_1));
|
||||
|
||||
v_nz = vaddq_u32(vaddl_u16(vget_low_u16(v_pz), vget_high_u16(v_pz)), v_nz);
|
||||
|
||||
src += blockSizej;
|
||||
j += blockSizej;
|
||||
}
|
||||
|
||||
i += blockSizei;
|
||||
}
|
||||
|
||||
CV_DECL_ALIGNED(16) unsigned int buf[4];
|
||||
vst1q_u32(buf, v_nz);
|
||||
nz += i - saturate_cast<int>(buf[0] + buf[1] + buf[2] + buf[3]);
|
||||
nz = i - v_reduce_sum(v_sum32);
|
||||
v_cleanup();
|
||||
#endif
|
||||
return nz + countNonZero_(src, len - i);
|
||||
return nz + countNonZero_(src + i, len - i);
|
||||
}
|
||||
|
||||
static int countNonZero64f( const double* src, int len )
|
||||
@@ -378,7 +314,7 @@ int cv::countNonZero( InputArray _src )
|
||||
CV_Assert( func != 0 );
|
||||
|
||||
const Mat* arrays[] = {&src, 0};
|
||||
uchar* ptrs[1]{};
|
||||
uchar* ptrs[1] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int total = (int)it.size, nz = 0;
|
||||
|
||||
|
||||
@@ -98,6 +98,10 @@ int solveLP(const Mat& Func, const Mat& Constr, Mat& z){
|
||||
CV_Assert(Constr.type()==CV_64FC1 || Constr.type()==CV_32FC1);
|
||||
CV_Assert((Func.rows==1 && (Constr.cols-Func.cols==1))||
|
||||
(Func.cols==1 && (Constr.cols-Func.rows==1)));
|
||||
if (!z.empty())
|
||||
CV_CheckTypeEQ(z.type(), CV_64FC1, "");
|
||||
else
|
||||
CV_CheckType(z.type(), z.type() == CV_64FC1 || z.type() == CV_8UC1/*empty cv::Mat*/, "");
|
||||
|
||||
//copy arguments for we will shall modify them
|
||||
Mat_<double> bigC=Mat_<double>(1,(Func.rows==1?Func.cols:Func.rows)+1),
|
||||
|
||||
@@ -342,7 +342,7 @@ public:
|
||||
int lutcn = lut_.channels();
|
||||
|
||||
const Mat* arrays[] = {&src, &dst, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int len = (int)it.size;
|
||||
|
||||
@@ -408,7 +408,7 @@ void cv::LUT( InputArray _src, InputArray _lut, OutputArray _dst )
|
||||
CV_Assert( func != 0 );
|
||||
|
||||
const Mat* arrays[] = {&src, &dst, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int len = (int)it.size;
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@ void magnitude( InputArray src1, InputArray src2, OutputArray dst )
|
||||
Mat Mag = dst.getMat();
|
||||
|
||||
const Mat* arrays[] = {&X, &Y, &Mag, 0};
|
||||
uchar* ptrs[3]{};
|
||||
uchar* ptrs[3] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int len = (int)it.size*cn;
|
||||
|
||||
@@ -194,7 +194,7 @@ void phase( InputArray src1, InputArray src2, OutputArray dst, bool angleInDegre
|
||||
Mat Angle = dst.getMat();
|
||||
|
||||
const Mat* arrays[] = {&X, &Y, &Angle, 0};
|
||||
uchar* ptrs[3]{};
|
||||
uchar* ptrs[3] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int j, total = (int)(it.size*cn), blockSize = total;
|
||||
size_t esz1 = X.elemSize1();
|
||||
@@ -280,7 +280,7 @@ void cartToPolar( InputArray src1, InputArray src2,
|
||||
Mat Mag = dst1.getMat(), Angle = dst2.getMat();
|
||||
|
||||
const Mat* arrays[] = {&X, &Y, &Mag, &Angle, 0};
|
||||
uchar* ptrs[4]{};
|
||||
uchar* ptrs[4] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int j, total = (int)(it.size*cn), blockSize = std::min(total, ((BLOCK_SIZE+cn-1)/cn)*cn);
|
||||
size_t esz1 = X.elemSize1();
|
||||
@@ -577,7 +577,7 @@ void polarToCart( InputArray src1, InputArray src2,
|
||||
CV_IPP_RUN(!angleInDegrees, ipp_polarToCart(Mag, Angle, X, Y));
|
||||
|
||||
const Mat* arrays[] = {&Mag, &Angle, &X, &Y, 0};
|
||||
uchar* ptrs[4]{};
|
||||
uchar* ptrs[4] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
cv::AutoBuffer<float> _buf;
|
||||
float* buf[2] = {0, 0};
|
||||
@@ -676,7 +676,7 @@ void exp( InputArray _src, OutputArray _dst )
|
||||
Mat dst = _dst.getMat();
|
||||
|
||||
const Mat* arrays[] = {&src, &dst, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int len = (int)(it.size*cn);
|
||||
|
||||
@@ -709,7 +709,7 @@ void log( InputArray _src, OutputArray _dst )
|
||||
Mat dst = _dst.getMat();
|
||||
|
||||
const Mat* arrays[] = {&src, &dst, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int len = (int)(it.size*cn);
|
||||
|
||||
@@ -1241,7 +1241,7 @@ void pow( InputArray _src, double power, OutputArray _dst )
|
||||
Mat dst = _dst.getMat();
|
||||
|
||||
const Mat* arrays[] = {&src, &dst, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int len = (int)(it.size*cn);
|
||||
|
||||
@@ -1588,7 +1588,7 @@ void patchNaNs( InputOutputArray _a, double _val )
|
||||
|
||||
Mat a = _a.getMat();
|
||||
const Mat* arrays[] = {&a, 0};
|
||||
int* ptrs[1]{};
|
||||
int* ptrs[1] = {};
|
||||
NAryMatIterator it(arrays, (uchar**)ptrs);
|
||||
size_t len = it.size*a.channels();
|
||||
Cv32suf val;
|
||||
|
||||
@@ -2144,7 +2144,7 @@ void cv::transform( InputArray _src, OutputArray _dst, InputArray _mtx )
|
||||
CV_Assert( func != 0 );
|
||||
|
||||
const Mat* arrays[] = {&src, &dst, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
size_t i, total = it.size;
|
||||
|
||||
@@ -2290,7 +2290,7 @@ void cv::perspectiveTransform( InputArray _src, OutputArray _dst, InputArray _mt
|
||||
CV_Assert( func != 0 );
|
||||
|
||||
const Mat* arrays[] = {&src, &dst, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
size_t i, total = it.size;
|
||||
|
||||
@@ -2441,7 +2441,7 @@ void cv::scaleAdd( InputArray _src1, double alpha, InputArray _src2, OutputArray
|
||||
}
|
||||
|
||||
const Mat* arrays[] = {&src1, &src2, &dst, 0};
|
||||
uchar* ptrs[3]{};
|
||||
uchar* ptrs[3] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
size_t i, len = it.size*cn;
|
||||
|
||||
@@ -3301,7 +3301,7 @@ double Mat::dot(InputArray _mat) const
|
||||
}
|
||||
|
||||
const Mat* arrays[] = {this, &mat, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int len = (int)(it.size*cn);
|
||||
double r = 0;
|
||||
|
||||
@@ -1413,18 +1413,39 @@ void _OutputArray::create(int d, const int* sizes, int mtype, int i,
|
||||
case 16:
|
||||
((std::vector<Vec4i>*)v)->resize(len);
|
||||
break;
|
||||
case 20:
|
||||
((std::vector<Vec<int, 5> >*)v)->resize(len);
|
||||
break;
|
||||
case 24:
|
||||
((std::vector<Vec6i>*)v)->resize(len);
|
||||
break;
|
||||
case 28:
|
||||
((std::vector<Vec<int, 7> >*)v)->resize(len);
|
||||
break;
|
||||
case 32:
|
||||
((std::vector<Vec8i>*)v)->resize(len);
|
||||
break;
|
||||
case 36:
|
||||
((std::vector<Vec<int, 9> >*)v)->resize(len);
|
||||
break;
|
||||
case 40:
|
||||
((std::vector<Vec<int, 10> >*)v)->resize(len);
|
||||
break;
|
||||
case 44:
|
||||
((std::vector<Vec<int, 11> >*)v)->resize(len);
|
||||
break;
|
||||
case 48:
|
||||
((std::vector<Vec<int, 12> >*)v)->resize(len);
|
||||
break;
|
||||
case 52:
|
||||
((std::vector<Vec<int, 13> >*)v)->resize(len);
|
||||
break;
|
||||
case 56:
|
||||
((std::vector<Vec<int, 14> >*)v)->resize(len);
|
||||
break;
|
||||
case 60:
|
||||
((std::vector<Vec<int, 15> >*)v)->resize(len);
|
||||
break;
|
||||
case 64:
|
||||
((std::vector<Vec<int, 16> >*)v)->resize(len);
|
||||
break;
|
||||
|
||||
@@ -121,7 +121,7 @@ cv::Scalar cv::mean( InputArray _src, InputArray _mask )
|
||||
CV_Assert( cn <= 4 && func != 0 );
|
||||
|
||||
const Mat* arrays[] = {&src, &mask, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int total = (int)it.size, blockSize = total, intSumBlockSize = 0;
|
||||
int j, count = 0;
|
||||
@@ -786,7 +786,7 @@ void cv::meanStdDev( InputArray _src, OutputArray _mean, OutputArray _sdv, Input
|
||||
CV_Assert( func != 0 );
|
||||
|
||||
const Mat* arrays[] = {&src, &mask, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int total = (int)it.size, blockSize = total, intSumBlockSize = 0;
|
||||
int j, count = 0, nz0 = 0;
|
||||
|
||||
@@ -770,7 +770,7 @@ void cv::minMaxIdx(InputArray _src, double* minVal,
|
||||
CV_Assert( func != 0 );
|
||||
|
||||
const Mat* arrays[] = {&src, &mask, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
|
||||
size_t minidx = 0, maxidx = 0;
|
||||
|
||||
@@ -710,7 +710,7 @@ double cv::norm( InputArray _src, int normType, InputArray _mask )
|
||||
int cellSize = normType == NORM_HAMMING ? 1 : 2;
|
||||
|
||||
const Mat* arrays[] = {&src, 0};
|
||||
uchar* ptrs[1]{};
|
||||
uchar* ptrs[1] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int total = (int)it.size;
|
||||
int result = 0;
|
||||
@@ -727,7 +727,7 @@ double cv::norm( InputArray _src, int normType, InputArray _mask )
|
||||
CV_Assert( func != 0 );
|
||||
|
||||
const Mat* arrays[] = {&src, &mask, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
union
|
||||
{
|
||||
double d;
|
||||
@@ -1168,7 +1168,7 @@ double cv::norm( InputArray _src1, InputArray _src2, int normType, InputArray _m
|
||||
int cellSize = normType == NORM_HAMMING ? 1 : 2;
|
||||
|
||||
const Mat* arrays[] = {&src1, &src2, 0};
|
||||
uchar* ptrs[2]{};
|
||||
uchar* ptrs[2] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
int total = (int)it.size;
|
||||
int result = 0;
|
||||
@@ -1185,7 +1185,7 @@ double cv::norm( InputArray _src1, InputArray _src2, int normType, InputArray _m
|
||||
CV_Assert( func != 0 );
|
||||
|
||||
const Mat* arrays[] = {&src1, &src2, &mask, 0};
|
||||
uchar* ptrs[3]{};
|
||||
uchar* ptrs[3] = {};
|
||||
union
|
||||
{
|
||||
double d;
|
||||
|
||||
@@ -584,6 +584,11 @@ void RNG::fill( InputOutputArray _mat, int disttype,
|
||||
}
|
||||
ip[j][1] = cvCeil(a);
|
||||
int idiff = ip[j][0] = cvFloor(b) - ip[j][1] - 1;
|
||||
if (idiff < 0)
|
||||
{
|
||||
idiff = 0;
|
||||
ip[j][0] = 0;
|
||||
}
|
||||
double diff = b - a;
|
||||
|
||||
fast_int_mode = fast_int_mode && diff <= 4294967296. && (idiff & (idiff+1)) == 0;
|
||||
|
||||
@@ -602,7 +602,7 @@ cv::Scalar cv::sum( InputArray _src )
|
||||
CV_Assert( cn <= 4 && func != 0 );
|
||||
|
||||
const Mat* arrays[] = {&src, 0};
|
||||
uchar* ptrs[1]{};
|
||||
uchar* ptrs[1] = {};
|
||||
NAryMatIterator it(arrays, ptrs);
|
||||
Scalar s;
|
||||
int total = (int)it.size, blockSize = total, intSumBlockSize = 0;
|
||||
|
||||
Reference in New Issue
Block a user