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

FilterMedianBorder

将中值滤波器应用于源图像src并将结果存储到目标图像dst。边框像素的值根据边框类型和边框值赋值参数获得。此过滤器的内核大小由参数指定。

函数声明如下:

HmppResult HMPPI_FilterMedianBorder_16s_C1R(const int16_t* pSrc, int srcStep, int16_t* pDst, int dstStep, HmppiSize dstRoiSize, HmppiSize maskSize, HmppiBorderType borderType, int16_t borderValue);

参数

参数名

描述

取值范围

输入/输出

pSrc

指向源向量的指针。

非空

输入

srcStep

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

(0, INT_MAX]

输入

pDst

指向目的向量的指针。

非空

输出

dstStep

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

(0, INT_MAX]

输入

roiSize

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

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

输入

maskSize

掩码大小。

maskSize.width >=3 且为奇数, maskSize.height >= 3且为奇数

输入

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 MedianBorderExample()
{
    HmppiSize roi = { 4, 4 };
    const int16_t src[SRC_BUFFER_SIZE_T] = { 13, 17, 5, -1, 9, -8, 44, -23, -5, 1, 7, 54, 75, -32, -9, -10, 11, -5, 15, -33, 7, -45, 112, 99, -45, 28, 64, 60};
    int16_t dst[DST_BUFFER_SIZE_T] = {0};
    int32_t srcStep = 4 * sizeof(int16_t);
    int32_t dstStep = 4 * sizeof(int16_t);
    HmppiSize mskSize = {3, 3}; 
    HmppResult result = HMPPI_FilterMedianBorder_16s_C1R(src, srcStep, dst, dstStep, roi, mskSize, HMPPI_BORDER_CONST, -1);
    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("%d ",dst[i]);
    }
    printf("\n");
    return 0;
}
int main() {
    MedianBorderExample();
    return 0;
}

运行结果:

result: 0
dst= -1 5 -1 -1 -1 7 5 -1 -1 1 -8 -1 -1 -1 -1 -1