---
title: local_min/local_max
description: "算子给定一个滑动窗口，遍历所有的图像像素，计算以当前像素为中心的滑动窗口内的最大或最小值，将其作为输出图像在当前位置的像素值。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/251RC1/accel/kunpengaccel_kpcv_06_0021.html
sourcePath: /source/zh/kunpengboostkithistory/251RC1/accel/kunpengaccel_kpcv_06_0021.html
indexId: c7385436ee0ef7ca19900612f715e1677c72aa3d51185df0bba30ca17257567277
---
# local_min/local_max

#### 函数功能

算子给定一个滑动窗口，遍历所有的图像像素，计算以当前像素为中心的滑动窗口内的最大或最小值，将其作为输出图像在当前位置的像素值。


#### 函数接口

```
int kcv_LocalMax_acc(const double *_src, double *_dst, size_t src_rows, size_t src_cols, size_t window_rows, size_t window_cols);
int kcv_LocalMin_acc(const double *_src, double *_dst, size_t src_rows, size_t src_cols, size_t window_rows, size_t window_cols);
```


#### 参数

| 参数名 | 描述 | 取值范围 | 输入/输出 |
| --- | --- | --- | --- |
| \_src | 输入图像。 | 非空且申请内存大小为src\_rows\*src\_cols\*sizeof(double) | 输入 |
| \_dst | 输出图像。 | 非空且申请内存大小与\_src一致 | 输出 |
| src\_rows | 输入图像行数。 | (0, 16384] | 输入 |
| src\_cols | 输入图像列数。 | (0, 16384] | 输入 |
| window\_rows | 滑动窗口行数，必须为奇数。 | (0, src\_rows] | 输入 |
| window\_cols | 滑动窗口列数，必须为奇数。 | (0, src\_cols] | 输入 |


#### 返回值

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


#### 错误码

| 错误码 | 描述 |
| --- | --- |
| LITHO\_IMG\_STS\_NULL\_PTR\_ERR | 参数“\_src”或“\_dst”存在空指针。 |
| LITHO\_IMG\_STS\_SIZE\_ERR | 参数“src\_rows”或“src\_cols”值等于0。 参数“window\_rows”值大于“src\_rows”，或“window\_cols”值大于“src\_cols”。 |
| LITHO\_IMG\_STS\_SIZE\_WRN | 参数“window\_rows”或“window\_cols”值不为奇数。 |


#### 示例

```
#include <stdio.h>
#include <stdlib.h>
#include <complex.h>
#include <iostream>
#include <vector>
#include "kp_litho_img.h"

void test_kcv_laplacian_acc() {
    const size_t src_rows = 8; // 可调整
    const size_t src_cols = 8; // 可调整
    const size_t window_rows = 3; // 可调整
    const size_t window_cols = 3; // 可调整
    const size_t length = src_rows * src_cols; // 声明并初始化length
    double *src = (double *)malloc(length * sizeof(double));
    double *dst = (double *)malloc(length * sizeof(double));
    // 初始化输入图像（这里使用一个简单的5x5图像）
    double src_data[5][5] = {
        {0, 0, 0, 0, 0},
        {0, 1, 1, 1, 0},
        {0, 1, 0, 1, 0},
        {0, 1, 1, 1, 0},
        {0, 0, 0, 0, 0}
    };
    for (size_t i = 0; i < src_rows; i++) {
        for (size_t j = 0; j < src_cols; j++) {
            src[i * src_cols + j] = src_data[i][j];
        }
    }
    // 调用函数
    cv::kcv_LocalMax_acc(src, dst, src_rows, src_cols, window_rows, window_cols);
    // 打印结果（这里只打印部分结果）
    printf("Upsampled Image:\n");
    for (size_t i = 0; i < src_rows; i++) { // 修改为src_rows
        for (size_t j = 0; j < src_cols; j++) { // 修改为src_cols
            printf("%.2f ", dst[i * src_cols + j]);
            if (j == src_cols - 1) { // 修改为src_cols
                printf("\n");
            }
        }
    }
}
int main() {
    test_kcv_laplacian_acc();
    return 0;
}
```

运行结果：

```
Upsampled Image:
1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 
1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 
1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 
1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 
1.00 1.00 1.00 1.00 1.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
```
