cvconvert.cpp.svn-base
来自「非结构化路识别」· SVN-BASE 代码 · 共 1,330 行 · 第 1/5 页
SVN-BASE
1,330 行
ICV_DEF_CVT_SCALE_CASE( int, CV_NOP, ICV_SCALE, cast_macro, \
(short*&)src, iscale, ishift ); \
} \
else \
{ \
ICV_DEF_CVT_SCALE_CASE( int, CV_NOP, cvRound, cast_macro, \
(short*&)src, scale, shift ); \
} \
break; \
case CV_32S: \
ICV_DEF_CVT_SCALE_CASE( int, CV_NOP, cvRound, cast_macro, \
(int*&)src, scale, shift ) \
break; \
case CV_32F: \
ICV_DEF_CVT_SCALE_CASE( int, CV_NOP, cvRound, cast_macro, \
(float*&)src, scale, shift ) \
break; \
case CV_64F: \
ICV_DEF_CVT_SCALE_CASE( int, CV_NOP, cvRound, cast_macro, \
(double*&)src, scale, shift ) \
break; \
default: \
assert(0); \
return CV_BADFLAG_ERR; \
} \
\
return CV_OK; \
}
#define ICV_DEF_CVT_SCALE_FUNC_FLT( flavor, dsttype, cast_macro ) \
static CvStatus CV_STDCALL \
icvCvtScaleTo_##flavor##_C1R( const char* src, int srcstep, \
dsttype* dst, int dststep, \
CvSize size, double scale, double shift, \
int param ) \
{ \
int i, srctype = param; \
dsttype lut[256]; \
\
switch( CV_MAT_DEPTH(srctype) ) \
{ \
case CV_8U: \
if( size.width*size.height >= 256 ) \
{ \
for( i = 0; i < 256; i++ ) \
{ \
lut[i] = (dsttype)(i*scale + shift); \
} \
\
icvLUT_Transform_##flavor##_C1R( src, srcstep, dst, \
dststep, size, lut ); \
} \
else \
{ \
ICV_DEF_CVT_SCALE_CASE( dsttype, CV_8TO32F, cast_macro, \
CV_NOP, (uchar*&)src, scale, shift ); \
} \
break; \
case CV_8S: \
if( size.width*size.height >= 256 ) \
{ \
for( i = 0; i < 256; i++ ) \
{ \
lut[i] = (dsttype)((char)i*scale + shift); \
} \
\
icvLUT_Transform_##flavor##_C1R( src, srcstep, dst, \
dststep, size, lut ); \
} \
else \
{ \
ICV_DEF_CVT_SCALE_CASE( dsttype, CV_8TO32F, cast_macro, \
CV_NOP, (char*&)src, scale, shift ); \
} \
break; \
case CV_16S: \
ICV_DEF_CVT_SCALE_CASE( dsttype, CV_NOP, cast_macro, CV_NOP, \
(short*&)src, scale, shift ); \
break; \
case CV_32S: \
ICV_DEF_CVT_SCALE_CASE( dsttype, CV_NOP, cast_macro, CV_NOP, \
(int*&)src, scale, shift ) \
break; \
case CV_32F: \
ICV_DEF_CVT_SCALE_CASE( dsttype, CV_NOP, cast_macro, CV_NOP, \
(float*&)src, scale, shift ) \
break; \
case CV_64F: \
ICV_DEF_CVT_SCALE_CASE( dsttype, CV_NOP, cast_macro, CV_NOP, \
(double*&)src, scale, shift ) \
break; \
default: \
assert(0); \
return CV_BADFLAG_ERR; \
} \
\
return CV_OK; \
}
ICV_DEF_CVT_SCALE_FUNC_INT( 8u, uchar, CV_CAST_8U )
ICV_DEF_CVT_SCALE_FUNC_INT( 8s, char, CV_CAST_8S )
ICV_DEF_CVT_SCALE_FUNC_INT( 16s, short, CV_CAST_16S )
ICV_DEF_CVT_SCALE_FUNC_INT( 32s, int, CV_CAST_32S )
ICV_DEF_CVT_SCALE_FUNC_FLT( 32f, float, CV_CAST_32F )
ICV_DEF_CVT_SCALE_FUNC_FLT( 64f, double, CV_CAST_64F )
CV_DEF_INIT_FUNC_TAB_2D( CvtScaleTo, C1R )
/****************************************************************************************\
* Conversion w/o scaling macros *
\****************************************************************************************/
#define ICV_DEF_CVT_CASE_2D( src_type, dst_type, work_type, cast_macro1, cast_macro2, \
src_ptr, src_step, dst_ptr, dst_step, size ) \
{ \
for( ; (size).height--; (src_ptr) += (src_step), (dst_ptr) += (dst_step)) \
{ \
int i; \
\
for( i = 0; i <= (size).width - 4; i += 4 ) \
{ \
work_type t0 = cast_macro1(((src_type*)(src_ptr))[i]); \
work_type t1 = cast_macro1(((src_type*)(src_ptr))[i+1]); \
\
((dst_type*)(dst_ptr))[i] = cast_macro2(t0); \
((dst_type*)(dst_ptr))[i+1] = cast_macro2(t1); \
\
t0 = cast_macro1(((src_type*)(src_ptr))[i+2]); \
t1 = cast_macro1(((src_type*)(src_ptr))[i+3]); \
\
((dst_type*)(dst_ptr))[i+2] = cast_macro2(t0); \
((dst_type*)(dst_ptr))[i+3] = cast_macro2(t1); \
} \
\
for( ; i < (size).width; i++ ) \
{ \
work_type t0 = cast_macro1(((src_type*)(src_ptr))[i]); \
((dst_type*)(dst_ptr))[i] = cast_macro2(t0); \
} \
} \
}
#define ICV_DEF_CVT_FUNC_2D( flavor, dst_type, work_type, cast_macro2, \
src_depth1, src_type1, cast_macro11, \
src_depth2, src_type2, cast_macro12, \
src_depth3, src_type3, cast_macro13, \
src_depth4, src_type4, cast_macro14, \
src_depth5, src_type5, cast_macro15 ) \
IPCVAPI_IMPL( CvStatus, \
icvCvtTo_##flavor##_C1R,( const void* pSrc, int step1, \
void* pDst, int step, \
CvSize size, int param )) \
{ \
int srctype = param; \
const char* src = (const char*)pSrc; \
char* dst = (char*)pDst; \
\
switch( CV_MAT_DEPTH(srctype) ) \
{ \
case src_depth1: \
ICV_DEF_CVT_CASE_2D( src_type1, dst_type, work_type, \
cast_macro11, cast_macro2, \
src, step1, dst, step, size ); \
break; \
case src_depth2: \
ICV_DEF_CVT_CASE_2D( src_type2, dst_type, work_type, \
cast_macro12, cast_macro2, \
src, step1, dst, step, size ); \
break; \
case src_depth3: \
ICV_DEF_CVT_CASE_2D( src_type3, dst_type, work_type, \
cast_macro13, cast_macro2, \
src, step1, dst, step, size ); \
break; \
case src_depth4: \
ICV_DEF_CVT_CASE_2D( src_type4, dst_type, work_type, \
cast_macro14, cast_macro2, \
src, step1, dst, step, size ); \
break; \
case src_depth5: \
ICV_DEF_CVT_CASE_2D( src_type5, dst_type, work_type, \
cast_macro15, cast_macro2, \
src, step1, dst, step, size ); \
break; \
} \
\
return CV_OK; \
}
ICV_DEF_CVT_FUNC_2D( 8u, uchar, int, CV_CAST_8U,
CV_8S, char, CV_NOP,
CV_16S, short, CV_NOP,
CV_32S, int, CV_NOP,
CV_32F, float, cvRound,
CV_64F, double, cvRound )
ICV_DEF_CVT_FUNC_2D( 8s, char, int, CV_CAST_8S,
CV_8U, uchar, CV_NOP,
CV_16S, short, CV_NOP,
CV_32S, int, CV_NOP,
CV_32F, float, cvRound,
CV_64F, double, cvRound )
ICV_DEF_CVT_FUNC_2D( 16s, short, int, CV_CAST_16S,
CV_8U, uchar, CV_NOP,
CV_8S, char, CV_NOP,
CV_32S, int, CV_NOP,
CV_32F, float, cvRound,
CV_64F, double, cvRound )
ICV_DEF_CVT_FUNC_2D( 32s, int, int, CV_NOP,
CV_8U, uchar, CV_NOP,
CV_8S, char, CV_NOP,
CV_16S, short, CV_NOP,
CV_32F, float, cvRound,
CV_64F, double, cvRound )
ICV_DEF_CVT_FUNC_2D( 32f, float, float, CV_NOP,
CV_8U, uchar, CV_8TO32F,
CV_8S, char, CV_8TO32F,
CV_16S, short, CV_NOP,
CV_32S, int, CV_CAST_32F,
CV_64F, double, CV_CAST_32F )
ICV_DEF_CVT_FUNC_2D( 64f, double, double, CV_NOP,
CV_8U, uchar, CV_8TO32F,
CV_8S, char, CV_8TO32F,
CV_16S, short, CV_NOP,
CV_32S, int, CV_NOP,
CV_32F, float, CV_NOP )
CV_DEF_INIT_FUNC_TAB_2D( CvtTo, C1R )
typedef CvStatus (CV_STDCALL *CvCvtFunc)( const void* src, int srcstep,
void* dst, int dststep, CvSize size,
int param );
typedef CvStatus (CV_STDCALL *CvCvtScaleFunc)( const void* src, int srcstep,
void* dst, int dststep, CvSize size,
double scale, double shift,
int param );
CV_IMPL void
cvConvertScale( const void* srcarr, void* dstarr,
double scale, double shift )
{
static CvFuncTable cvt_tab, cvtscale_tab;
static int inittab = 0;
CV_FUNCNAME( "cvConvertScale" );
__BEGIN__;
int type;
int is_nd = 0;
CvMat srcstub, *src = (CvMat*)srcarr;
CvMat dststub, *dst = (CvMat*)dstarr;
CvSize size;
int src
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?