Visible to Intel only — GUID: GUID-73A51984-15CD-493E-AE4D-2B4CBDEA109D
Visible to Intel only — GUID: GUID-73A51984-15CD-493E-AE4D-2B4CBDEA109D
MorphCloseBorder
Closes an image.
Syntax
IppStatus ippiMorphCloseBorder_<mod>(const Ipp<datatype>* pSrc, int srcStep, Ipp<datatype>* pDst, int dstStep, IppiSize roiSize, IppiBorderType borderType, Ipp<datatype> borderValue, const IppiMorphAdvState* pSpec, Ipp8u* pBuffer);
Supported values for mod:
8u_C1R | 16u_C1R | 16s_C1R | 32f_C1R |
IppStatus ippiMorphCloseBorder_<mod>(const Ipp<datatype>* pSrc, int srcStep, Ipp<datatype>* pDst, int dstStep, IppiSize roiSize, IppiBorderType borderType, const Ipp<datatype> borderValue[3], const IppiMorphAdvState* pSpec, Ipp8u* pBuffer);
Supported values for mod:
8u_C3R | 32f_C3R |
IppStatus ippiMorphCloseBorder_<mod>(const Ipp<datatype>* pSrc, int srcStep, Ipp<datatype>* pDst, int dstStep, IppiSize roiSize, IppiBorderType borderType, const Ipp<datatype> borderValue[4], const IppiMorphAdvState* pSpec, Ipp8u* pBuffer);
Supported values for mod:
8u_C4R | 32f_C4R |
IppStatus ippiMorphCloseBorder_1u_C1R(const Ipp8u* pSrc, int srcStep, int srcBitOffset, Ipp8u* pDst, int dstStep, int dstBitOffset, IppiSize roiSize, IppiBorderType borderType, Ipp8u borderValue, const IppiMorphAdvState* pSpec, Ipp8u* pBuffer);
Include Files
ippcv.h
Domain Dependencies
Headers: ippcore.h, ippvm.h, ipps.h, ippi.h
Libraries: ippcore.lib, ippvm.lib, ipps.lib, ippi.lib
Parameters
pSrc |
Pointer to the source image ROI. | ||||
srcStep |
Distance, in bytes, between the starting points of consecutive lines in the source image. | ||||
srcBitOffset |
Offset, in bits, from the first byte of the source image (for 1u_C1R flavor). |
||||
pDst |
Pointer to the destination image ROI. | ||||
dstStep |
Distance, in bytes, between the starting points of consecutive lines in the destination image. | ||||
dstBitOffset |
Offset, in bits, from the first byte of the destination image (for 1u_C1R flavor). |
||||
roiSize |
Size of the source and destination image ROI. | ||||
borderType |
Type of border. Possible values are:
|
||||
borderValue, borderValue[3], borderValue[4] |
Constant value to assign to pixels of the constant border. This parameter is applicable only to the ippBorderConst border type. | ||||
pSpec |
Pointer to the specification structure. | ||||
pBuffer |
Pointer to the external buffer required for dilation operations. |
Description
Before using this function, you need to initialize the morphology specification structure using the MorphAdvInit function.
This function operates with ROI.
This function performs closing of a rectangular ROI area inside a one-, three-, or four-channel 2D image using the mask specified in the pSpec structure.
The result is equivalent to successive dilation of the source image by the structured element (mask) and erosion by the reverted structured element.
This function requires that the image ROI does not exceed the maximum width and height roiSize specified by the initialization functions.
Usage example of this function is similar to the example provided with the MorphOpenBorder function description.
Return Values
ippStsNoErr |
Indicates no error. |
ippStsNullPtrErr |
Indicates an error when one of the specified pointers is NULL. |
ippStsSizeErr |
Indicates an error condition when:
|
ippStsStepErr |
Indicates an error condition if srcStep or dstStep is less than roiSize.width * <pixelSize>. |
ippStsNotEvenStepErr |
Indicates an error condition if one of the step values for 16-bit integer images is not divisible by 2. |
ippStsBorderErr |
Indicates an error condition if borderType has an illegal value. |
Example
The code example below demonstrates how to use the ippiMorphAdvGetSize_16u_C1R, ippiMorphAdvInit_16u_C1R, and ippiMorphCloseBorder_16u_C1R functions.
IppStatus func_MorfCloseBorder() { IppiMorphAdvState* pSpec = NULL; Ipp8u* pBuffer = NULL; IppiSize roiSize = {5, 5}; Ipp8u pMask[3*3] = {1, 1, 1, 1, 0, 1, 1, 1, 1}; IppiSize maskSize = {3, 3}; Ipp16u pSrc[5*5] = { 1, 2, 4, 1, 2, 5, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 5, 1, 2}; Ipp16u pDst[5*5]; int srcStep = 5*sizeof(Ipp16u); int dstStep = 5*sizeof(Ipp16u); int dstSize = 5; IppStatus status = ippStsNoErr; int specSize = 0, bufferSize = 0; IppiBorderType borderType= ippBorderRepl; Ipp16u borderValue = 0; status = ippiMorphAdvGetSize_16u_C1R( roiSize, maskSize, &specSize, &bufferSize ); if (status != ippStsNoErr) return status; pSpec = (IppiMorphAdvState*)ippsMalloc_8u(specSize); pBuffer = (Ipp8u*)ippsMalloc_8u(bufferSize); status = ippiMorphAdvInit_16u_C1R( roiSize, pMask, maskSize, pSpec, pBuffer ); if (status != ippStsNoErr) { ippsFree(pBuffer); ippsFree(pSpec); return status; } status = ippiMorphCloseBorder_16u_C1R (pSrc, srcStep, pDst, dstStep, roiSize, borderType, borderValue, pSpec, pBuffer); ippsFree(pBuffer); ippsFree(pSpec); return status; }
The result is as follows:
pDst-> 5 4 4 2 2 5 4 4 2 2 2 2 2 2 2 2 2 5 2 2 2 2 2 2 2