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;

运行结果:

相关推荐
limuyang27 小时前
我在 2核2G 云主机上跑 OpenViking:一次关于云主机、模型选型与长期成本的真实复盘
人工智能·开源·ai编程
Shulex8 小时前
跨境电商 AI Agent 核心架构解析:从只读问答到自主执行的工程落地
人工智能·架构·智能客服·跨境电商
Java后端的Ai之路8 小时前
CAS并发控制-从CPU指令到企业级乐观锁
vue.js·人工智能·python·cas·乐观锁
情 九9 小时前
MCP 实战 06:把 HTTP 接口接成工具,让 AI 帮你查数据
人工智能·网络协议·http·mcp
码农小旋风9 小时前
Ray分布式计算引擎介绍
人工智能·架构
火山引擎和TA的超级拍档们9 小时前
产品情报局 08 | AI 内容助手:全网热点驱动,一站式打通内容生产全链路
人工智能
Binovate缤江数智9 小时前
水泵远程开关之后,还需要管什么?数智开关在无人值守泵站中的监测、保护与能耗分析
人工智能·物联网
素男9 小时前
两个月不是六十天
人工智能·agent·self-becoming·ai长期记忆·ai自我介绍
byte轻骑兵10 小时前
【LMP】规范精讲[10]: 语音专线开线记——SCO 固定占座与 eSCO 限时重传
人工智能·人机交互·lmp·蓝牙链路管理·蓝牙外设