---
title: FilterLaplacianBorder
description: "此函数将拉普拉斯滤波器应用于源图像src并将结果存储到目标图像dst。边框像素的值根据边框类型和边框值赋值参数获得。此过滤器的内核是参数指定的3x3或5x5大小的矩阵掩码。内核具有以下值，锚点位于中心单元格。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/accel/kunpengaccel_hmpp_06_0234.html
sourcePath: /source/zh/kunpengboostkithistory/2200/accel/kunpengaccel_hmpp_06_0234.html
indexId: 44cf6a76c0efbad8e2ffb47703e2323b38a5b58d7502ab59c22f63f5af48c96d75
---
# FilterLaplacianBorder

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

2 4 4 4 2

2 0 2 4 0 -8 0 4

0 -8 0 4 -8 -24 -8 4

2 0 2 4 0 -8 0 4

2 4 4 4 2

此函数所需应用到的buffer空间，需要先使用FilterLaplacianInit来申请，并在主函数中使用该空间。

函数接口声明如下：

- 辅助空间buffer申请与释放函数：
  HmppResult HMPPI_FilterLaplacianInit_8u16s_C1R(HmppiSize roiSize, HmppiMaskSize mask, uint8_t **buffer);

  HmppResult HMPPI_FilterLaplacianInit_32f_C1R(HmppiSize roiSize, HmppiMaskSize mask, uint8_t **buffer);

  HmppResult HMPPI_FilterLaplacianRelease(uint8_t *buffer);

- 主函数：
  HmppResult HMPPI_FilterLaplacianBorder_8u16s_C1R(const uint8_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiMaskSize maskSize, HmppiBorderType borderType, uint8_t borderValue, uint8_t *buffer);

  HmppResult HMPPI_FilterLaplacianBorder_32f_C1R(const float *src, int32_t srcStep, float *dst, int32_t dstStep,HmppiSize roiSize, HmppiMaskSize maskSize, HmppiBorderType borderType, float borderValue, uint8_t *buffer);


#### 参数

| 参数名 | 描述 | 取值范围 | 输入/输出 |
| --- | --- | --- | --- |
| src | 指向源向量的指针。 | 非空 | 输入 |
| srcStep | 源图像中连续行起点之间的距离（以字节为单位）。 | (0, INT\_MAX] | 输入 |
| dst | 指向目的向量的指针。 | 非空 | 输出 |
| 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时有意义。 | 数据类型范围内的值 | 输入 |
| buffer | 指向计算所需缓冲区的指针。在init中申请空间与初始化，在release中释放空间，在主函数中使用申请的空间。 | 非空 | 输入/输出 |


#### 返回值

- 成功：返回HMPP_STS_NO_ERR。
- 失败：返回错误码。


#### 错误码

| 错误码 | 描述 |
| --- | --- |
| HMPP\_STS\_NULL\_PTR\_ERR | src、dst这两个入参中存在空指针。 |
| 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值。 |


#### 示例

```
#define SRC_BUFFER_SIZE_T 28
#define DST_BUFFER_SIZE_T 16
int LaplacianBorderExample()
{
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(float);
int32_t dstStep = 4 * sizeof(float);
uint8_t *buffer = NULL;
HmppResult result = HMPPI_FilterLaplacianInit_32f_C1R(roi, HmppMskSize3x3, &buffer);
if (result == HMPP_STS_NO_ERR) {
result = HMPPI_FilterLaplacianBorder_32f_C1R(src, srcStep, dst, dstStep, roi, HmppMskSize3x3, HMPPI_BORDER_MIRROR, 0.0f, buffer);
}
if (result != HMPP_STS_NO_ERR) {
printf("result error: %d\n", result);
}
printf("dst= ");
for(int32_t i = 0; i < DST_BUFFER_SIZE_T; i++){
printf("%f ",dst[i]);
}
printf("\n");
HMPPI_FilterLaplacianRelease(buffer);
buffer = NULL;
return 0;
}
```

运行结果：

```
result = 0
dst = -7.0406216e+18 1.5248922e+28 -3.9418209e+28 7.7666443e+28 -1.5248922e+28 1.7734242e+34 5.1225988e+27 -2.04904e+27 -3.5468485e+34 7.7259126e+27 -2.2689171e+31 2.2694294e+31 -2.0290336e+26 3.5468485e+34 0 0
```
