OpenCV图像处理——边界插值函数 borderInterpolate

1. 说明

borderInterpolate 用于在应用滤波器或进行图像变换时,计算外插像素的源位置;它根据指定的边界模式(如复制、反射或环绕),返回相应的"供体(donor)"像素坐标(即参考像素)。该函数将处于图像范围之外的坐标(p)映射回有效的图像范围内(即 0 到 len-1 之间)。

2. 例子

本示例演示了如何手动查找图像边界之外的"虚"坐标处的像素值。

// 创建一个 5x1 单通道矩阵: 10, 20, 30, 40, 50

cv::Mat row = (cv::Mat_<uchar>(1, 5) << 10, 20, 30, 40, 50);

int len = row.cols;

// 我们希望访问 index -2 的位置(越界)

int p = -2;

// 1. BORDER_REPLICATE: aaaaaa|abcdefgh|hhhhhhh

// index-2 将映射到第一个元素(index 0)。

int idxReplicate = cv::borderInterpolate(p, len, cv::BORDER_REPLICATE);

// 2. BORDER_REFLECT: fedcba|abcdefgh|hgfedcb

// index - 2 将沿边缘反射(映射至index 1)。

int idxReflect = cv::borderInterpolate(p, len, cv::BORDER_REFLECT);

// 3. BORDER_WRAP: cdefgh|abcdefgh|abcdefg

// index -2 环绕至末尾(对应于index 3)。

int idxWrap = cv::borderInterpolate(p, len, cv::BORDER_WRAP);

std::cout << "Original row: 10, 20, 30, 40, 50" << std::endl;

std::cout << "Index " << p << " with BORDER_REPLICATE maps to source index: " << idxReplicate << " (Value: " << (int)row.at<uchar>(0, idxReplicate) << ")" << std::endl;

std::cout << "Index " << p << " with BORDER_REFLECT maps to source index: " << idxReflect << " (Value: " << (int)row.at<uchar>(0, idxReflect) << ")" << std::endl;

std::cout << "Index " << p << " with BORDER_WRAP maps to source index: " << idxWrap << " (Value: " << (int)row.at<uchar>(0, idxWrap) << ")" << std::endl;

运行结果:

相关推荐
HZjiangzi2 分钟前
从传统精密制造到机器人赛道:捷昌驱动旋转模组技术突围之路
人工智能
shaibdoio4 分钟前
意图识别实战:从规则匹配到传统机器学习,再到混合大模型方案
人工智能·机器学习
IT_陈寒6 分钟前
SpringBoot自动配置的坑我帮你踩过了
前端·人工智能·后端
198******126348 分钟前
2026企业AI办公工具选型全指南:自动资料整合与报告生成赛道全景
大数据·人工智能
一木 之林9 分钟前
《OpenAI库基础学习总结:Client 初始化、流式输出 delta 拼接与多轮历史 messages 全流程拆解》
人工智能·学习·计算机视觉·stable diffusion·aigc
Ivanqhz12 分钟前
BURG(自底向上重写生成器)
服务器·数据库·人工智能·深度学习·算法
198******1263412 分钟前
Work Agent深度解读:AI长程任务执行的机制与落地形态
人工智能
m4Rk_13 分钟前
【论文阅读】Agent 记忆机制(90):HyperMem——用超图建模长期记忆中的高阶关联
论文阅读·人工智能·学习·开源·github
言乐618 分钟前
逻辑回归与利弊
人工智能·算法·机器学习·数据挖掘·逻辑回归
墨心@21 分钟前
AI Agent 学习总结
人工智能·自然语言处理·agent·harness·datawhale共学