diff --git a/modules/core/src/count_non_zero.simd.hpp b/modules/core/src/count_non_zero.simd.hpp index 9de616fe8a..26af0a8d71 100644 --- a/modules/core/src/count_non_zero.simd.hpp +++ b/modules/core/src/count_non_zero.simd.hpp @@ -66,8 +66,9 @@ static int countNonZero8u( const uchar* src, int len ) return nz; } -static int countNonZero16u( const ushort* src, int len ) +static int countNonZero16u( const uchar* src_ptr, int len ) { + const ushort* src = reinterpret_cast(src_ptr); int i = 0, nz = 0; #if (CV_SIMD || CV_SIMD_SCALABLE) int len0 = len & -VTraits::vlanes(); @@ -101,8 +102,9 @@ static int countNonZero16u( const ushort* src, int len ) return nz + countNonZero_(src + i, len - i); } -static int countNonZero32s( const int* src, int len ) +static int countNonZero32s( const uchar* src_ptr, int len ) { + const int* src = reinterpret_cast(src_ptr); int i = 0, nz = 0; #if (CV_SIMD || CV_SIMD_SCALABLE) int len0 = len & -VTraits::vlanes(); @@ -136,8 +138,9 @@ static int countNonZero32s( const int* src, int len ) return nz + countNonZero_(src + i, len - i); } -static int countNonZero32f( const float* src, int len ) +static int countNonZero32f( const uchar* src_ptr, int len ) { + const float* src = reinterpret_cast(src_ptr); int i = 0, nz = 0; #if (CV_SIMD || CV_SIMD_SCALABLE) int len0 = len & -VTraits::vlanes(); @@ -171,8 +174,9 @@ static int countNonZero32f( const float* src, int len ) return nz + countNonZero_(src + i, len - i); } -static int countNonZero64f( const double* src, int len ) +static int countNonZero64f( const uchar* src_ptr, int len ) { + const double* src = reinterpret_cast(src_ptr); int nz = 0, i = 0; #if (CV_SIMD_64F || CV_SIMD_SCALABLE_64F) v_int64 sum1 = vx_setzero_s64();