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

FilterSobelBorder

将Sobel滤波器应用于源图像src并将结果存储到目标图像dst。边框像素的值根据边框类型和边框值赋值参数获得。此过滤器的内核是参数指定的3x3或5x5大小的矩阵掩码。内核具有以下值,锚点位于中心单元格。

1 2 1

0 0 0

-1 -2 -1

1 4 6 4 1

2 8 12 8 2

0 0 0 0 0

-2 -8 -12 -8 -2

-1 -4 -6 -4 -1

函数声明如下:

HmppResult HMPPI_FilterSobelHorizBorder_32f_C1R(const float* pSrc, int srcStep, float* pDst, int dstStep, HmppiSize roi, HmppiMaskSize maskSize, HmppiBorderType borderType, float borderValue);

HmppResult HMPPI_FilterSobelNegVertBorder_32f_C1R(const float* pSrc, int srcStep, float* pDst, int dstStep, HmppiSize roi, HmppiMaskSize maskSize, HmppiBorderType borderType, float borderValue);

参数

参数名

描述

取值范围

输入/输出

pSrc

指向源向量的指针。

非空

输入

srcStep

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

(0, INT_MAX]

输入

pDst

指向目的向量的指针。

非空

输出

dstStep

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

(0, INT_MAX]

输入

roiSize

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

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

输入

maskSize

预定义掩码。

HmppMskSize3x3或HmppMskSize5x5

输入

borderType

边界类型。

以下HmppiBorderType的枚举值之一:

HMPPI_BORDER_CONST

HMPPI_BORDER_REPL

HMPPI_BORDER_MIRROR

输入

borderValue

指定常量边框像素的常量值,仅当borderType = HMPPI_BORDER_CONST时有意义。

数据类型范围内的值

输入

返回值

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

错误码

错误码

描述

HMPP_STS_NULL_PTR_ERR

pSrc、pDst的入参中存在空指针。

HMPP_STS_SIZE_ERR

roiSize.width、roiSize.height的入参中存在值小于等于0。

HMPP_STS_STEP_ERR

srcStep、dstStep小于等于0。

HMPP_STS_ROI_ERR

roiSize.width * 数据类型所占字节数 > 步长。

HMPP_STS_NOT_EVEN_STEP_ERR

srcStep、dstStep不能被src、dst所属数据类型的字节长度整除。

HMPP_STS_BAD_ARG_ERR

不支持的borderType类型值或者不支持的maskSize值。

示例

#include <stdio.h>
#include "hmppi.h"
#include "hmpp_type.h"
#define SRC_BUFFER_SIZE_T 28
#define DST_BUFFER_SIZE_T 16
int SobelBorderExample()
{
    HmppiSize roi = { 2, 4 };
    const float src[SRC_BUFFER_SIZE_T] = { 9.8375815e-16, 4.5484828e-16, 1.4972698e-14, -1.3397389e+25, 1.9061152e+27, -8.8007769e+17, -217025.86, -6.2768196e+14, 4.4335606e+33, 1.0258707e-13, -9.3150633e-11, -5192.7163, 2.536292e+25, 6.0832354e+15, 8.5712402e+29, -0.15451884, -0.2848247, -2.1714717e+10, 2.7212473e+17, -1.3591454e-22, 7.6473188e+21, -2.2729285e-30, 1129877.1, -1.0089557e-05, -1.1054221e+21, -3.8945858e-19, -6.8345717e-34, 60685416};
    float dst[DST_BUFFER_SIZE_T] = {0};
    int32_t srcStep = 4 * sizeof(int16_t);
    int32_t dstStep = 4 * sizeof(int16_t);
    HmppiMaskSize mskSize = HmppMskSize3x3; 
    HmppResult result = HMPPI_FilterSobelHorizBorder_32f_C1R(src, srcStep, dst, dstStep, roi, mskSize, HMPPI_BORDER_CONST, 0);
    if (result != HMPP_STS_NO_ERR) {
        printf("result error: %d\n", result);
    } else {
        printf("result: %d\n", (int)result);
    }
    printf("dst= ");
    for(int32_t i = 0; i < DST_BUFFER_SIZE_T; i++){
        printf("%e ",dst[i]);
    }
    printf("\n");
    return 0;
}
int main() {
    SobelBorderExample();
    return 0;
}

运行结果:

result: 0
dst= -1.339739e+25 -2.679478e+25 3.812230e+27 1.906115e+27 1.339739e+25 2.679478e+25 -3.812230e+27 -1.906115e+27 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00