DilateBorder
Performs dilation of an image.
Syntax
IppStatus ippiDilateBorder_<mod>(const Ipp<datatype>*
pSrc
, int
srcStep
, Ipp<datatype>*
pDst
, int
dstStep
, IppiSize
roiSize
, IppiBorderType
borderType
, Ipp<datatype>
borderValue
, const IppiMorphState*
pSpec
, Ipp8u*
pBuffer
);
Supported values for
mod
:8u_C1R | 16u_C1R | 16s_C1R | 32f_C1R |
IppStatus ippiDilateBorder_<mod>(const Ipp<datatype>*
pSrc
, int
srcStep
, Ipp<datatype>*
pDst
, int
dstStep
, IppiSize
roiSize
, IppiBorderType
borderType
, const Ipp<datatype>
borderValue[3]
, const IppiMorphState*
pSpec
, Ipp8u*
pBuffer
);
Supported values for
mod
:8u_C3R | 32f_C3R |
IppStatus ippiDilateBorder_<mod>(const Ipp<datatype>*
pSrc
, int
srcStep
, Ipp<datatype>*
pDst
, int
dstStep
, IppiSize
roiSize
, IppiBorderType
borderType
, const Ipp<datatype>
borderValue[4]
, const IppiMorphState*
pSpec
, Ipp8u*
pBuffer
);
Supported values for
mod
:8u_C4R | 32f_C4R |
IppStatus ippiDilateBorder_1u_C1R(const Ipp8u*
pSrc
, int
srcStep
, int
srcBitOffset
, Ipp8u*
pDst
, int
dstStep
, int
dstBitOffset
, IppiSize
roiSize
, IppiBorderType
borderType
, Ipp8u
borderValue
, const IppiMorphState*
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 (for1u_C1Rflavor).
- 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 (for1u_C1Rflavor).
- roiSize
- Size of the source and destination image ROI.
- borderType
- Type of border. Possible values are:
- ippBorderRepl
- Border is replicated from the edge pixels.
- ippBorderInMem
- Border is obtained from the source image pixels in memory.
- borderValue
- Constant value to assign to pixels of the constant border. This parameter is applicable only to theippBorderConstborder type.
- pSpec
- Pointer to the specification structure.
- pBuffer
- Pointer to the external buffer required for dilation operations.
Description
This function operates with ROI.
This function expands a rectangular ROI area inside a one-channel two-dimensional image using a mask specified in the specification structure
pSpec
. Before using this function, you need to initialize the structure using the MorphologyBorderInit
function. The output pixel is set to the maximum of the corresponding input pixel and its neighboring pixels that are picked out by the nonzero mask values.
Return Values
- ippStsNoErr
- Indicates no error.
- ippStsNullPtrErr
- Indicates an error when one of the specified pointers isNULL.
- ippStsSizeErr
- Indicates an error when:
- roiSizehas a field with a zero or negative value
- roiSize.widthis more than the maximum ROIroiWidthpassed to the initialization function
- ippStsStepErr
- Indicates an error whensrcStepordstStepis less thanroiSize.width*<pixelSize>.
- ippStsNotEvenStepErr
- Indicates an error when one of the step values for 16-bit integer images is not divisible by 2.
- ippStsBorderErr
- Indicates an error whenborderTypehas an illegal value.
- ippStsInplaceModeNotSupportedErr
- Indicates an error when thepSrcpointer is equal to thepDstpointer.
Example
The code example below demonstrates how to use the
ippiMorphologyBorderGetSize_16u_C1R
, ippiMorphologyBorderInit_16u_C1R
, and ippiDilateBorder_16u_C1R
functions to perform dilation of the source image. IppStatus func_MorfDilateBorder() { IppiMorphState* 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, 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 = ippiMorphologyBorderGetSize_16u_C1R( roiSize, maskSize, &specSize, &bufferSize ); if (status != ippStsNoErr) return status; pSpec = (IppiMorphState*)ippsMalloc_8u(specSize); pBuffer = (Ipp8u*)ippsMalloc_8u(bufferSize); status = ippiMorphologyBorderInit_16u_C1R( roiSize, pMask, maskSize, pSpec, pBuffer ); if (status != ippStsNoErr) { ippsFree(pBuffer); ippsFree(pSpec); return status; } status = ippiDilateBorder_16u_C1R( pSrc, srcStep, pDst, dstStep, roiSize, borderType, borderValue, pSpec, pBuffer); ippsFree(pBuffer); ippsFree(pSpec); return status; }
The result is as follows:
pDst-> 5 5 4 4 2 5 5 4 4 2 5 5 2 2 2 2 5 5 5 2 2 5 5 5 2