cvabsdiff.cpp.svn-base
来自「非结构化路识别」· SVN-BASE 代码 · 共 639 行 · 第 1/2 页
SVN-BASE
639 行
CvSize size;
if( !inittab )
{
icvInitAbsDiffCTable( &adiffs_tab );
inittab = 1;
}
CV_CALL( src = cvGetMat( src, &srcstub, &coi1 ));
CV_CALL( dst = cvGetMat( dst, &dststub, &coi2 ));
if( coi1 != 0 || coi2 != 0 )
CV_ERROR( CV_BadCOI, "" );
if( !CV_ARE_TYPES_EQ(src, dst) )
CV_ERROR_FROM_CODE( CV_StsUnmatchedFormats );
if( !CV_ARE_SIZES_EQ(src, dst) )
CV_ERROR_FROM_CODE( CV_StsUnmatchedSizes );
sctype = type = CV_MAT_TYPE( src->type );
if( CV_MAT_DEPTH(type) < CV_32S )
sctype = (type & CV_MAT_CN_MASK) | CV_32SC1;
size = icvGetMatSize( src );
size.width *= CV_MAT_CN( type );
src_step = src->step;
dst_step = dst->step;
if( CV_IS_MAT_CONT( src->type & dst->type ))
{
size.width *= size.height;
size.height = 1;
src_step = dst_step = CV_STUB_STEP;
}
CV_CALL( cvScalarToRawData( &scalar, buf, sctype, 1 ));
{
CvFunc2D_2A1P func = (CvFunc2D_2A1P)
(adiffs_tab.fn_2d[CV_MAT_DEPTH(type)]);
if( !func )
CV_ERROR( CV_StsUnsupportedFormat, "" );
IPPI_CALL( func( src->data.ptr, src_step, dst->data.ptr,
dst_step, size, buf ));
}
__END__;
}
/*
Finds L1 norm between two blocks.
*/
int
icvCmpBlocksL1_8u_C1( const uchar * vec1, const uchar * vec2, int len )
{
int i, sum = 0;
for( i = 0; i <= len - 4; i += 4 )
{
int t0 = vec1[i] - vec2[i];
int t1 = vec1[i + 1] - vec2[i + 1];
int t2 = vec1[i + 2] - vec2[i + 2];
int t3 = vec1[i + 3] - vec2[i + 3];
sum += CV_IABS( t0 ) + CV_IABS( t1 ) + CV_IABS( t2 ) + CV_IABS( t3 );
}
for( ; i < len; i++ )
{
int t0 = vec1[i] - vec2[i];
sum += CV_IABS( t0 );
}
return sum;
}
int64
icvCmpBlocksL2_8u_C1( const uchar * vec1, const uchar * vec2, int len )
{
int i, s = 0;
int64 sum = 0;
for( i = 0; i <= len - 4; i += 4 )
{
int v = vec1[i] - vec2[i];
int e = v * v;
v = vec1[i + 1] - vec2[i + 1];
e += v * v;
v = vec1[i + 2] - vec2[i + 2];
e += v * v;
v = vec1[i + 3] - vec2[i + 3];
e += v * v;
sum += e;
}
for( ; i < len; i++ )
{
int v = vec1[i] - vec2[i];
s += v * v;
}
return sum + s;
}
int64
icvCmpBlocksL2_8s_C1( const char *vec1, const char *vec2, int len )
{
int i, s = 0;
int64 sum = 0;
for( i = 0; i <= len - 4; i += 4 )
{
int v = vec1[i] - vec2[i];
int e = v * v;
v = vec1[i + 1] - vec2[i + 1];
e += v * v;
v = vec1[i + 2] - vec2[i + 2];
e += v * v;
v = vec1[i + 3] - vec2[i + 3];
e += v * v;
sum += e;
}
for( ; i < len; i++ )
{
int v = vec1[i] - vec2[i];
s += v * v;
}
return sum + s;
}
double
icvCmpBlocksL2_32f_C1( const float *vec1, const float *vec2, int len )
{
double sum = 0;
int i;
for( i = 0; i <= len - 4; i += 4 )
{
double v0 = vec1[i] - vec2[i];
double v1 = vec1[i + 1] - vec2[i + 1];
double v2 = vec1[i + 2] - vec2[i + 2];
double v3 = vec1[i + 3] - vec2[i + 3];
sum += v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;
}
for( ; i < len; i++ )
{
double v = vec1[i] - vec2[i];
sum += v * v;
}
return sum;
}
/*
Calculates cross correlation for two blocks.
*/
int64
icvCrossCorr_8u_C1( const uchar * vec1, const uchar * vec2, int len )
{
int i, s = 0;
int64 sum = 0;
for( i = 0; i <= len - 4; i += 4 )
{
int e = vec1[i] * vec2[i];
int v = vec1[i + 1] * vec2[i + 1];
e += v;
v = vec1[i + 2] * vec2[i + 2];
e += v;
v = vec1[i + 3] * vec2[i + 3];
e += v;
sum += e;
}
for( ; i < len; i++ )
{
s += vec1[i] * vec2[i];
}
return sum + s;
}
int64
icvCrossCorr_8s_C1( const char *vec1, const char *vec2, int len )
{
int i, s = 0;
int64 sum = 0;
for( i = 0; i <= len - 4; i += 4 )
{
int e = vec1[i] * vec2[i];
int v = vec1[i + 1] * vec2[i + 1];
e += v;
v = vec1[i + 2] * vec2[i + 2];
e += v;
v = vec1[i + 3] * vec2[i + 3];
e += v;
sum += e;
}
for( ; i < len; i++ )
{
s += vec1[i] * vec2[i];
}
return sum + s;
}
double
icvCrossCorr_32f_C1( const float *vec1, const float *vec2, int len )
{
double sum = 0;
int i;
for( i = 0; i <= len - 4; i += 4 )
{
double v0 = vec1[i] * vec2[i];
double v1 = vec1[i + 1] * vec2[i + 1];
double v2 = vec1[i + 2] * vec2[i + 2];
double v3 = vec1[i + 3] * vec2[i + 3];
sum += v0 + v1 + v2 + v3;
}
for( ; i < len; i++ )
{
double v = vec1[i] * vec2[i];
sum += v;
}
return sum;
}
/*
Calculates cross correlation for two blocks.
*/
int64
icvSumPixels_8u_C1( const uchar * vec, int len )
{
int i, s = 0;
int64 sum = 0;
for( i = 0; i <= len - 4; i += 4 )
{
sum += vec[i] + vec[i + 1] + vec[i + 2] + vec[i + 3];
}
for( ; i < len; i++ )
{
s += vec[i];
}
return sum + s;
}
int64
icvSumPixels_8s_C1( const char *vec, int len )
{
int i, s = 0;
int64 sum = 0;
for( i = 0; i <= len - 4; i += 4 )
{
sum += vec[i] + vec[i + 1] + vec[i + 2] + vec[i + 3];
}
for( ; i < len; i++ )
{
s += vec[i];
}
return sum + s;
}
double
icvSumPixels_32f_C1( const float *vec, int len )
{
double sum = 0;
int i;
for( i = 0; i <= len - 4; i += 4 )
{
sum += vec[i] + vec[i + 1] + vec[i + 2] + vec[i + 3];
}
for( ; i < len; i++ )
{
sum += vec[i];
}
return sum;
}
/* End of file. */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?