鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

Erode3x3

使用3x3蒙版进行图像腐蚀,是ErodeBorder的一个特例,其默认蒙版元素全为非0有效。

腐蚀就是求局部最小值的操作,运算符是“”,其定义如下:

该公式表示用蒙版B来对图像A进行腐蚀处理,其中B是一个3x3蒙版。通过蒙版B与图像A进行卷积计算,扫描图像中的每一个像素点,计算B覆盖区域的像素点最小值,并用这个最小值替换参考点指定的像素值实现腐蚀。

以下为接口输入输出图示:

函数接口声明如下:

HmppResult HMPPI_Erode3x3_64f_C1R(const double *src, int32_t srcStep, double *dst, int32_t dstStep, HmppiSize roiSize);

参数

参数名

描述

取值范围

输入/输出

src

指向源图像的指针。

非空

输入

srcStep

源图像中连续行的起点之间的距离(以字节为单位)。

非负整数,且为src数据类型的字节整倍数

输入

dst

指向目的向量的指针。

非空

输出

dstStep

目标图像中连续行的起点之间的距离(以字节为单位)。

非负整数,且为dst数据类型的字节整倍数

输入

roiSize

源和目标图像感兴趣区域的大小(以像素为单位)。

roiSize.width∈(0, INT_MAX],roiSize.height∈(0, INT_MAX]

输入

返回值

  • 成功:返回HMPP_STS_NO_ERR
  • 失败:返回错误码。

错误码

错误码

描述

HMPP_STS_NULL_PTR_ERR

任何指定的指针为空。

HMPP_STS_SIZE_ERR

roiSize的字段为零或负值。

HMPP_STS_STEP_ERR

源或者目标Step存在零或负值。

HMPP_STS_NOT_EVEN_STEP_ERR

srcStep或者dstStep不为其图像所属数据类型的字节长度的整倍数。

HMPP_STS_ROI_ERR

源或者目标图像的宽和高比roiSize的字段+2的结果小。

源或目标图像的宽和高需比roiSize的宽和高分别大2像素,否则将返回HMPP_STS_ROI_ERR。

示例

#define SRC_BUFFER_SIZE_T 96
#define DST_BUFFER_SIZE_T 64
void Erode3x3Example()
{
    HmppiSize roi = { 4, 4 };
    const double src[SRC_BUFFER_SIZE_T] = {
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66,
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66,
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66,
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66,
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66,
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66,
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66,
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66
    };

    double dst[DST_BUFFER_SIZE_T] = { 0 };

    const int32_t srcWidth = 12;
    const int32_t dstWidth = 8;
    int32_t srcStep = srcWidth * sizeof(double);
    int32_t dstStep = dstWidth * sizeof(double);
    HmppResult result = HMPPI_Erode3x3_64f_C1R(src, srcStep, dst, dstStep, roi);

    printf("result = %d \ndst = ", result);
    if (result != HMPP_STS_NO_ERR) {
        printf("result error: %d\n", result);
    }

    for (int32_t i = 0; i < DST_BUFFER_SIZE_T; ++i) {
        if (i % dstWidth == 0) {
            printf("\n");
        }
        printf("%.2lf ", dst[i]);
    }
    printf("\n");
}

int main(void)
{
    Erode3x3Example();
    return 0;
}

运行结果:

result = 0
dst =
11.00 11.00 22.00 33.00 0.00 0.00 0.00 0.00
11.00 11.00 22.00 33.00 0.00 0.00 0.00 0.00
11.00 11.00 22.00 33.00 0.00 0.00 0.00 0.00
11.00 11.00 22.00 33.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00