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;

运行结果:

相关推荐
OceanBase数据库官方博客3 小时前
OceanBase DataPilot AIP:Ontology 承载AI能力面的另一条路
人工智能·oceanbase
笨鸟先飞,勤能补拙4 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
一次旅行4 小时前
AI 前沿日报 | 2026年07月31日
人工智能
2601_963749104 小时前
标题:越华环保集团|面向美丽河湖项目的数字化污水治理云边协同采集架构设计
人工智能
沐籽李4 小时前
从溶剂可及表面积SASA理解抗体结构与工程改造
人工智能·药物设计·aidd·sasa
智慧物业老杨4 小时前
物业如何做好预算管理?落地架构逻辑
人工智能·架构
微学AI4 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
城管不管4 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
boppu4 小时前
布草特殊污渍去渍剂的种类及作用
大数据·人工智能
AIsoft_86885 小时前
会议录音转文字与AI纪要工具推荐:免费额度与核心功能对比指南
人工智能