local_min/local_max
函数功能
算子给定一个滑动窗口,遍历所有的图像像素,计算以当前像素为中心的滑动窗口内的最大或最小值,将其作为输出图像在当前位置的像素值。
函数接口
1 2 | void kcv_LocalMax_acc(const double *_src, double *_dst, size_t src_rows, size_t src_cols, size_t window_rows, size_t window_cols); void 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 |
|
LITHO_IMG_STS_SIZE_WRN |
参数“window_rows”或“window_cols”值不为奇数。 |
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #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; } |
运行结果:
1 2 3 4 5 6 7 8 9 | 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 |
父主题: 接口定义