MCPcopy Create free account
hub / github.com/creatale/node-dv / IPPMorphReplicate

Function IPPMorphReplicate

deps/opencv/modules/imgproc/src/morph.cpp:1143–1216  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1141
1142#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
1143static bool IPPMorphReplicate(int op, const Mat &src, Mat &dst, const Mat &kernel,
1144 const Size& ksize, const Point &anchor, bool rectKernel)
1145{
1146 int type = src.type();
1147 const Mat* _src = &src;
1148 Mat temp;
1149 if( src.data == dst.data )
1150 {
1151 src.copyTo(temp);
1152 _src = &temp;
1153 }
1154 //DEPRECATED. Allocates and initializes morphology state structure for erosion or dilation operation.
1155 typedef IppStatus (CV_STDCALL* ippiMorphologyInitAllocFunc)(int, const void*, IppiSize, IppiPoint, IppiMorphState **);
1156 typedef IppStatus (CV_STDCALL* ippiMorphologyBorderReplicateFunc)(const void*, int, void *, int,
1157 IppiSize, IppiBorderType, IppiMorphState *);
1158 typedef IppStatus (CV_STDCALL* ippiFilterMinMaxGetBufferSizeFunc)(int, IppiSize, int*);
1159 typedef IppStatus (CV_STDCALL* ippiFilterMinMaxBorderReplicateFunc)(const void*, int, void*, int,
1160 IppiSize, IppiSize, IppiPoint, void*);
1161
1162 ippiMorphologyInitAllocFunc initAllocFunc = 0;
1163 ippiMorphologyBorderReplicateFunc morphFunc = 0;
1164 ippiFilterMinMaxGetBufferSizeFunc getBufSizeFunc = 0;
1165 ippiFilterMinMaxBorderReplicateFunc morphRectFunc = 0;
1166
1167 #define IPP_MORPH_CASE(type, flavor) \
1168 case type: \
1169 initAllocFunc = (ippiMorphologyInitAllocFunc)ippiMorphologyInitAlloc_##flavor; \
1170 morphFunc = op == MORPH_ERODE ? (ippiMorphologyBorderReplicateFunc)ippiErodeBorderReplicate_##flavor : \
1171 (ippiMorphologyBorderReplicateFunc)ippiDilateBorderReplicate_##flavor; \
1172 getBufSizeFunc = (ippiFilterMinMaxGetBufferSizeFunc)ippiFilterMinGetBufferSize_##flavor; \
1173 morphRectFunc = op == MORPH_ERODE ? (ippiFilterMinMaxBorderReplicateFunc)ippiFilterMinBorderReplicate_##flavor : \
1174 (ippiFilterMinMaxBorderReplicateFunc)ippiFilterMaxBorderReplicate_##flavor; \
1175 break
1176
1177 switch( type )
1178 {
1179 IPP_MORPH_CASE(CV_8UC1, 8u_C1R);
1180 IPP_MORPH_CASE(CV_8UC3, 8u_C3R);
1181 IPP_MORPH_CASE(CV_8UC4, 8u_C4R);
1182 IPP_MORPH_CASE(CV_32FC1, 32f_C1R);
1183 IPP_MORPH_CASE(CV_32FC3, 32f_C3R);
1184 IPP_MORPH_CASE(CV_32FC4, 32f_C4R);
1185 default:
1186 return false;
1187 }
1188 #undef IPP_MORPH_CASE
1189
1190 IppiSize roiSize = {src.cols, src.rows};
1191 IppiSize kernelSize = {ksize.width, ksize.height};
1192 IppiPoint point = {anchor.x, anchor.y};
1193
1194 if( !rectKernel && morphFunc && initAllocFunc )
1195 {
1196 IppiMorphState* pState;
1197 if( initAllocFunc( roiSize.width, kernel.data, kernelSize, point, &pState ) < 0 )
1198 return false;
1199 bool is_ok = morphFunc( _src->data, (int)_src->step[0],
1200 dst.data, (int)dst.step[0],

Callers 1

IPPMorphOpFunction · 0.85

Calls 3

alignPtrFunction · 0.85
typeMethod · 0.45
copyToMethod · 0.45

Tested by

no test coverage detected