cvaccum.cpp.svn-base
来自「非结构化路识别」· SVN-BASE 代码 · 共 1,023 行 · 第 1/4 页
SVN-BASE
1,023 行
dsttype t0 = pSrcDst[x] + cvtmacro(pSrc1[x])* \
cvtmacro(maskmacro(pMask[x], pSrc2[x])); \
dsttype t1 = pSrcDst[x + 1] + cvtmacro(pSrc1[x + 1])* \
cvtmacro(maskmacro(pMask[x + 1], pSrc2[x + 1])); \
\
pSrcDst[x] = (dsttype)t0; \
pSrcDst[x + 1] = (dsttype)t1; \
\
t0 = pSrcDst[x + 2] + cvtmacro(pSrc1[x + 2])* \
cvtmacro(maskmacro(pMask[x + 2], pSrc2[x + 2])); \
t1 = pSrcDst[x + 3] + cvtmacro(pSrc1[x + 3])* \
cvtmacro(maskmacro(pMask[x + 3], pSrc2[x + 3])); \
\
pSrcDst[x + 2] = (dsttype)t0; \
pSrcDst[x + 3] = (dsttype)t1; \
} \
\
for( ; x < roiSize.width; x++ ) \
{ \
dsttype t0 = pSrcDst[x] + cvtmacro(pSrc1[x])* \
cvtmacro(maskmacro(pMask[x], pSrc2[x])); \
pSrcDst[x] = (dsttype)t0; \
} \
}
#define ICV_DEF_ACCPRODMASK_CASE_C2( dsttype, cvtmacro, maskmacro, prepare_mask)\
{ \
for( x = 0; x < roiSize.width; x++ ) \
{ \
prepare_mask(m,pMask[x]); \
dsttype t0 = pSrcDst[x*2] + cvtmacro(pSrc1[x*2])* \
cvtmacro(maskmacro(pSrc2[x*2], m )); \
dsttype t1 = pSrcDst[x*2+1] + cvtmacro(pSrc1[x*2+1])* \
cvtmacro(maskmacro(pSrc2[x*2+1], m )); \
\
pSrcDst[x*2] = (dsttype)t0; \
pSrcDst[x*2 + 1] = (dsttype)t1; \
} \
}
#define ICV_DEF_ACCPRODMASK_CASE_C3( dsttype, cvtmacro, maskmacro, prepare_mask)\
{ \
for( x = 0; x < roiSize.width; x++ ) \
{ \
prepare_mask(m,pMask[x]); \
dsttype t0 = pSrcDst[x*3] + cvtmacro(pSrc1[x*3])* \
cvtmacro(maskmacro(pSrc2[x*3], m )); \
dsttype t1 = pSrcDst[x*3+1] + cvtmacro(pSrc1[x*3+1])* \
cvtmacro(maskmacro(pSrc2[x*3+1], m )); \
dsttype t2 = pSrcDst[x*3+2] + cvtmacro(pSrc1[x*3+2])* \
cvtmacro(maskmacro(pSrc2[x*3+2], m )); \
\
pSrcDst[x*3] = (dsttype)t0; \
pSrcDst[x*3 + 1] = (dsttype)t1; \
pSrcDst[x*3 + 2] = (dsttype)t2; \
} \
}
#define ICV_DEF_ACCPRODMASK_CASE_C4( dsttype, cvtmacro, maskmacro, prepare_mask ) \
{ \
for( x = 0; x < roiSize.width; x++ ) \
{ \
prepare_mask(m,pMask[x]); \
dsttype t0 = pSrcDst[x*4] + cvtmacro(pSrc1[x*4])* \
cvtmacro(maskmacro(pSrc2[x*4], m )); \
dsttype t1 = pSrcDst[x*4+1] + cvtmacro(pSrc1[x*4+1])* \
cvtmacro(maskmacro(pSrc2[x*4+1], m )); \
dsttype t2 = pSrcDst[x*4+2] + cvtmacro(pSrc1[x*4+2])* \
cvtmacro(maskmacro(pSrc2[x*4+2], m )); \
dsttype t3 = pSrcDst[x*4+3] + cvtmacro(pSrc1[x*4+3])* \
cvtmacro(maskmacro(pSrc2[x*4+3], m )); \
\
pSrcDst[x*4] = (dsttype)t0; \
pSrcDst[x*4 + 1] = (dsttype)t1; \
pSrcDst[x*4 + 2] = (dsttype)t2; \
pSrcDst[x*4 + 3] = (dsttype)t3; \
} \
}
#define ICV_DEF_ACCPRODMASK_FUNC( name, cn, srctype, dsttype, cvtmacro, \
maskmacro, define_mask, prepare_mask ) \
IPCVAPI_IMPL( CvStatus, \
name,( const srctype *pSrc1, int src1Step, \
const srctype *pSrc2, int src2Step, \
const uchar *pMask, int maskStep, \
dsttype *pSrcDst, int srcDstStep, \
CvSize roiSize )) \
{ \
int x; \
define_mask; \
\
for( ; roiSize.height--; (char*&)pSrc1 += src1Step, \
(char*&)pSrc2 += src2Step, \
(char*&)pMask += maskStep, \
(char*&)pSrcDst += srcDstStep ) \
{ \
ICV_DEF_ACCPRODMASK_CASE_C##cn( dsttype, cvtmacro, \
maskmacro, prepare_mask ); \
} \
\
return CV_OK; \
}
#define ICV_DEF_ACCWEIGHTEDMASK_CASE_C1( dsttype, cvtmacro, \
maskmacro, prepare_mask ) \
{ \
for( x = 0; x <= roiSize.width - 4; x += 4 ) \
{ \
dsttype t0 = pSrcDst[x] + \
maskmacro(pMask[x], cvtmacro(pSrc[x]) - pSrcDst[x]); \
dsttype t1 = pSrcDst[x+1] + \
maskmacro(pMask[x+1], cvtmacro(pSrc[x+1]) - pSrcDst[x+1]); \
\
pSrcDst[x] = (dsttype)t0; \
pSrcDst[x + 1] = (dsttype)t1; \
\
t0 = pSrcDst[x+2] + \
maskmacro(pMask[x+2], cvtmacro(pSrc[x+2]) - pSrcDst[x+2]); \
t1 = pSrcDst[x+3] + \
maskmacro(pMask[x+3], cvtmacro(pSrc[x+3]) - pSrcDst[x+3]); \
\
pSrcDst[x + 2] = (dsttype)t0; \
pSrcDst[x + 3] = (dsttype)t1; \
} \
\
for( ; x < roiSize.width; x++ ) \
{ \
dsttype t0 = pSrcDst[x] + \
maskmacro(pMask[x], cvtmacro(pSrc[x]) - pSrcDst[x]); \
pSrcDst[x] = (dsttype)t0; \
} \
}
#define ICV_DEF_ACCWEIGHTEDMASK_CASE_C2( dsttype, cvtmacro, \
maskmacro, prepare_mask ) \
{ \
for( x = 0; x < roiSize.width; x++ ) \
{ \
prepare_mask( m, pMask[x] ); \
\
dsttype t0 = pSrcDst[x*2] + \
maskmacro(cvtmacro(pSrc[x*3]) - pSrcDst[x*2], m ); \
dsttype t1 = pSrcDst[x*2+1] + \
maskmacro(cvtmacro(pSrc[x*2+1]) - pSrcDst[x*2+1], m ); \
\
pSrcDst[x*2] = (dsttype)t0; \
pSrcDst[x*2 + 1] = (dsttype)t1; \
} \
}
#define ICV_DEF_ACCWEIGHTEDMASK_CASE_C3( dsttype, cvtmacro, \
maskmacro, prepare_mask ) \
{ \
for( x = 0; x < roiSize.width; x++ ) \
{ \
prepare_mask( m, pMask[x] ); \
\
dsttype t0 = pSrcDst[x*3] + \
maskmacro(cvtmacro(pSrc[x*3]) - pSrcDst[x*3], m ); \
dsttype t1 = pSrcDst[x*3+1] + \
maskmacro(cvtmacro(pSrc[x*3+1]) - pSrcDst[x*3+1], m ); \
dsttype t2 = pSrcDst[x*3+2] + \
maskmacro(cvtmacro(pSrc[x*3+2]) - pSrcDst[x*3+2], m ); \
\
pSrcDst[x*3] = (dsttype)t0; \
pSrcDst[x*3 + 1] = (dsttype)t1; \
pSrcDst[x*3 + 2] = (dsttype)t2; \
} \
}
#define ICV_DEF_ACCWEIGHTEDMASK_CASE_C4( dsttype, cvtmacro, \
maskmacro, prepare_mask ) \
{ \
for( x = 0; x < roiSize.width; x++ ) \
{ \
prepare_mask( m, pMask[x] ); \
\
dsttype t0 = pSrcDst[x*4] + \
maskmacro(cvtmacro(pSrc[x*4]) - pSrcDst[x*4], m ); \
dsttype t1 = pSrcDst[x*4+1] + \
maskmacro(cvtmacro(pSrc[x*4+1]) - pSrcDst[x*4+1], m ); \
dsttype t2 = pSrcDst[x*4+2] + \
maskmacro(cvtmacro(pSrc[x*4+2]) - pSrcDst[x*4+2], m ); \
dsttype t3 = pSrcDst[x*4+3] + \
maskmacro(cvtmacro(pSrc[x*4+3]) - pSrcDst[x*4+3], m ); \
\
pSrcDst[x*4] = (dsttype)t0; \
pSrcDst[x*4 + 1] = (dsttype)t1; \
pSrcDst[x*4 + 2] = (dsttype)t2; \
pSrcDst[x*4 + 3] = (dsttype)t3; \
} \
}
#define ICV_DEF_ACCWEIGHTMASK_FUNC( name, cn, srctype, dsttype, cvtmacro, \
maskmacro, define_mask, prepare_mask ) \
IPCVAPI_IMPL( CvStatus, \
name,( const srctype *pSrc, int srcStep, \
const uchar *pMask, int maskStep, \
dsttype *pSrcDst, int srcDstStep, \
CvSize roiSize, dsttype alpha )) \
{ \
int x; \
define_mask; \
\
for( ; roiSize.height--; (char*&)pSrc += srcStep, \
(char*&)pMask += maskStep, \
(char*&)pSrcDst += srcDstStep ) \
{ \
ICV_DEF_ACCWEIGHTEDMASK_CASE_C##cn( dsttype, cvtmacro, \
maskmacro, prepare_mask); \
} \
\
return CV_OK; \
}
#define CV_DEFINE_ALPHA_MASK float maskTab[] = { 0.f, alpha }
#define CV_PREPARE_INT_MASK( m, srcmask ) int m = ((srcmask) == 0) - 1
#define CV_PREPARE_FLT_MASK( m, srcmask ) float m = maskTab[(srcmask) != 0]
#define ICV_DUMMY(x) ((x)=(x))
#define ICV_DEF_ACC_ALL( flavor, srctype, dsttype ) \
\
ICV_DEF_ACC_FUNC( icvAddSquare_##flavor##_C1IR, srctype, dsttype, CV_8TO32F_SQR ) \
ICV_DEF_ACCPROD_FUNC( icvAddProduct_##flavor##_C1IR, srctype, dsttype, CV_8TO32F ) \
ICV_DEF_ACCWEIGHT_FUNC( icvAddWeighted_##flavor##_C1IR, srctype, dsttype, CV_8TO32F ) \
\
ICV_DEF_ACCMASK_FUNC( icvAdd_##flavor##_C1IMR, 1, srctype, dsttype, \
CV_8TO32F, CV_ANDMASK, ICV_DUMMY(pSrcDst), CV_PREPARE_INT_MASK ) \
ICV_DEF_ACCMASK_FUNC( icvAdd_##flavor##_C3IMR, 3, srctype, dsttype, \
CV_8TO32F, CV_AND, ICV_DUMMY(pSrcDst), CV_PREPARE_INT_MASK ) \
\
ICV_DEF_ACCMASK_FUNC( icvAddSquare_##flavor##_C1IMR, 1, srctype, dsttype, \
CV_8TO32F_SQR, CV_ANDMASK, ICV_DUMMY(pSrcDst), CV_PREPARE_INT_MASK )\
ICV_DEF_ACCMASK_FUNC( icvAddSquare_##flavor##_C3IMR, 3, srctype, dsttype, \
CV_8TO32F_SQR, CV_AND, ICV_DUMMY(pSrcDst), CV_PREPARE_INT_MASK ) \
\
ICV_DEF_ACCPRODMASK_FUNC( icvAddProduct_##flavor##_C1IMR, 1, srctype, dsttype, \
CV_8TO32F, CV_ANDMASK, ICV_DUMMY(pSrcDst), CV_PREPARE_INT_MASK )\
ICV_DEF_ACCPRODMASK_FUNC( icvAddProduct_##flavor##_C3IMR, 3, srctype, dsttype, \
CV_8TO32F, CV_AND, ICV_DUMMY(pSrcDst), CV_PREPARE_INT_MASK ) \
\
ICV_DEF_ACCWEIGHTMASK_FUNC( icvAddWeighted_##flavor##_C1IMR, 1, srctype, dsttype, \
CV_8TO32F, CV_MULMASK, CV_DEFINE_ALPHA_MASK, \
CV_PREPARE_FLT_MASK ) \
ICV_DEF_ACCWEIGHTMASK_FUNC( icvAddWeighted_##flavor##_C3IMR, 3, srctype, dsttype, \
CV_8TO32F, CV_MUL, CV_DEFINE_ALPHA_MASK, \
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?