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;

运行结果:

相关推荐
谷哥的小弟1 分钟前
大模型核心基础知识(13)—深度学习的发展基础与技术特点
人工智能·深度学习·机器学习·大模型·大语言模型
您^_^2 分钟前
ClaudeCode最近更新导致第三方模型Token消耗率暴涨,缓存命中也相当夸张!!
人工智能·windows·缓存·个人开发·claudecode·deepseek v4 pro
您^_^5 分钟前
新手上路(四):Codex MCP 实战——让 Codex 连接外部世界
人工智能·windows·个人开发·codex·deepseek v4 pro
veminhe5 分钟前
claude-code下载安装与使用
人工智能
波动几何5 分钟前
工作流重构技能的社会影响
人工智能
AI产品库6 分钟前
2026年5月30日AI简报 | OpenAI生物防御 | Anthropic融资 | 天津智博会 | 戴尔AI服务器 | GitHub Copilot自主化
人工智能
愚公搬代码8 分钟前
【愚公系列】《AI漫剧创作一本通》037-AI漫剧未来展望(视频Agent与创作方式变革)
人工智能
陆业聪11 分钟前
WebView与原生JS交互:JSBridge设计模式与安全实践
人工智能·aigc
吃好睡好便好11 分钟前
矩阵的左除和右除
人工智能·学习·线性代数·算法·矩阵
John_ToDebug11 分钟前
Claude Code Agent 使用最佳实践与底层机制全解
人工智能·经验分享·ai