OpenCV copyMakeBorder() 图像边界扩展详解与实战

在图像处理和计算机视觉中,有时需要在原始图像的四周增加边界(Padding)。这种操作在很多场景中都有应用,比如:

  • 卷积神经网络(CNN)中的图像预处理

  • 为图像添加装饰性边框

  • 保证滤波、卷积等操作不会丢失边缘信息

OpenCV 提供了一个非常方便的函数 cv2.copyMakeBorder() 来实现边界扩展。


1. copyMakeBorder() 函数原型

cv2.copyMakeBorder()是OpenCV库中的一个函数,用于给图像添加额外的边界(padding)。
dst = cv2.copyMakeBorder(src, top, bottom, left, right, borderType[, value])

参数说明

参数含义
src原始图像
top, bottom, left, right上、下、左、右四个方向的边界宽度(单位:像素)
borderType边界类型(见下文详解)
valueborderType=cv2.BORDER_CONSTANT 时,需要指定填充的颜色(BGR 格式)

2. 常用 borderType 类型

OpenCV 提供了多种扩展方式,不同方式在边缘处理时会有不同效果。

  1. cv2.BORDER_CONSTANT

    • 用固定颜色填充边界。

    • 需要额外指定 value 参数,例如 (0, 0, 255) 代表红色。

    • 适合纯色边框的效果。

  2. cv2.BORDER_REFLECT

    • 镜像反射边界,边界像素会被复制。

    • 模式类似:321|123456789|987

  3. cv2.BORDER_REFLECT_101cv2.BORDER_REFLECT101

    • 也是镜像反射,但不复制边界像素本身。

    • 模式类似:432|123456789|876

  4. cv2.BORDER_REPLICATE

    • 使用边界像素重复填充。

    • 模式类似:111|123456789|999

  5. cv2.BORDER_WRAP

    • 边界使用图像另一侧的像素包裹。

    • 模式类似:789|123456789|123


3. 示例代码

下面的示例会分别展示 5 种 borderType 效果,方便直观对比。

import cv2# 读取图片
img = cv2.imread('lyf.jpg')# 调整图片大小
img = cv2.resize(img, (500, 500))# 设置边界宽度
top, bottom, left, right = 100, 100, 100, 100# 1. 设置颜色边界(红色)
constant = cv2.copyMakeBorder(img, top, bottom, left, right,borderType=cv2.BORDER_CONSTANT, value=(0, 0, 255))# 2. 镜像反射(复制边界像素)
reflect = cv2.copyMakeBorder(img, top, bottom, left, right, borderType=cv2.BORDER_REFLECT)# 3. 镜像反射(不复制边界像素)
reflect101 = cv2.copyMakeBorder(img, top, bottom, left, right, borderType=cv2.BORDER_REFLECT101)# 4. 重复边界像素
replicate = cv2.copyMakeBorder(img, top, bottom, left, right, borderType=cv2.BORDER_REPLICATE)# 5. 包裹方式
wrap = cv2.copyMakeBorder(img, top, bottom, left, right, borderType=cv2.BORDER_WRAP)# 显示结果
cv2.imshow('Original', img)
cv2.imshow('BORDER_CONSTANT', constant)
cv2.imshow('BORDER_REFLECT', reflect)
cv2.imshow('BORDER_REFLECT101', reflect101)
cv2.imshow('BORDER_REPLICATE', replicate)
cv2.imshow('BORDER_WRAP', wrap)cv2.waitKey(0)
cv2.destroyAllWindows()

4. 运行效果示意

原图:lyf.jpg

BORDER_CONSTANT

BORDER_REFLECT

BORDER_REFLECT101

BORDER_REPLICATE

BORDER_WRAP

类型效果描述
BORDER_CONSTANT边界为纯红色(示例中是 (0,0,255)
BORDER_REFLECT边界为镜像反射,边缘处像素被复制
BORDER_REFLECT101边界为镜像反射,去掉边缘像素自身
BORDER_REPLICATE边界像素直接复制填充
BORDER_WRAP边界使用对面边的像素包裹

5.应用场景案例

多给几个真实案例,读者会立刻想到怎么用:

  • 图像边框美化 → 用 BORDER_CONSTANT 做彩色相框。

  • 深度学习数据增强 → 随机 padding 后再裁剪。

  • 全景图拼接 → 避免拼接缝隙处出现黑边。

  • 滤波降噪 → 用镜像 padding 防止边缘模糊不均。


6. 小结

cv2.copyMakeBorder() 是一个简单而强大的函数,可以在图像四周添加不同类型的边界。
在实际应用中:

  • 图像卷积/滤波前 → 推荐 BORDER_REFLECTBORDER_REFLECT101,能保留边缘信息。

  • 美化图片 → 推荐 BORDER_CONSTANT,可指定任意颜色作为相框。

  • 特殊视觉效果 → 可尝试 BORDER_WRAP

掌握它之后,你不仅能做图像边界填充,还能理解很多计算机视觉算法在“边缘处理”时的逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919181.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919181.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919181.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ansible管理变量和事实

ansible管理变量和事实与实施任务控制 在 Ansible 中,变量和事实(Facts)就像给剧本(Playbook)配备的 “信息工具箱”,让你的自动化配置管理更灵活、更智能。 变量:提前准备的 “预设信息” 变…

STM32--寄存器与标准库函数--基本定时器

目录 前言 基本定时器概念 定时时间 定时器时钟确定 倍频锁相环被正确配置为168MHz 定时器的库函数操作 代码 定时器的寄存器操作 代码 寄存器 后言 前言 使用平台:STM32F407ZET6 使用数据手册:STM32F407数据手册.pdf 使用参考手册&…

PCA 实现多向量压缩:首个主成分的深层意义

PCA 实现多向量压缩 第一个主成分(components_[0])正是数据协方差矩阵中最大特征值对应的特征向量。 ,layer_attention_vector[layer] 被赋值为 pca.components_[0],这确实是一个特征向量,具体来说是 PCA 分解得到的第一个主成分(主特征向量)。 关于它的维度: 假设 c…

网络常识-DNS如何解析

DNS(Domain Name System,域名系统)是互联网的“地址簿”,负责将人类易记的域名(如www.example.com)转换为计算机可识别的IP地址(如192.168.1.1)。其工作流程可以简单理解为“从域名到…

Java中 23 种设计模式介绍,附带示例

文章目录设计模式六大原则设计模式分类1、创建型模式(Creational Patterns)2、结构型模式(Structural Patterns)3、行为型模式(Behavioral Patterns)一、创建型模式(Creational Patterns&#x…

嵌入式开发入门——电子元器件~电磁继电器、蜂鸣器

文章目录电磁继电器定义关键参数实物蜂鸣器实物内部结构分类关键参数电磁继电器 定义 概述:电磁继电器是利用电磁感应原理职称的一种电磁开关,他能通过:低电压、低电流的电路,来控制高电压、高电流的电路。 关键参数 线圈电压…

ROS2基础

1.helloworld案例1.创建功能包(C)终端下,进入ws00_helloworld/src目录,使用如下指令创建一个C 功能包:ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld执行完毕&a…

Python爬虫实战:研究pygalmesh,构建Thingiverse平台三维网格数据处理系统

1. 引言 1.1 研究背景 在数字化浪潮席卷全球的当下,三维建模技术已成为连接虚拟与现实的核心纽带,广泛渗透于工程设计、地理信息系统(GIS)、虚拟现实(VR)、增强现实(AR)、医学影像等关键领域。例如,在建筑工程中,BIM(建筑信息模型)技术依赖高精度三维网格实现施工…

开发者说 | EmbodiedGen:为具身智能打造可交互3D世界生成引擎

概述 具身智能的发展离不开高质量、多样化的可交互3D仿真环境。为突破传统构建方式的瓶颈,我们提出了EmbodiedGen,一个基于生成式AI技术的自动化3D世界生成引擎,助力低成本、高效率地创建真实且可交互的3D场景。用户仅需输入任务定义或场景图…

GitHub Copilot:AI编程助手的架构演进与真实世界影响

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术! 1. 技术背景与核心架构 GitHub Copilot 是由 GitHub 与 OpenAI 联合开…

PDF OCR + 大模型:让文档理解不止停留在识字

在企业数字化的实际场景中,PDF OCR 已经很普遍了:从扫描件提取文本、表格到生成可搜索 PDF。但这类技术往往停留在"把图片变成文字",对文档背后的语义、逻辑、业务价值理解不足。 而当 OCR 遇上大语言模型(LLM&#xff…

半敏捷卫星观测调度系统的设计与实现

半敏捷卫星观测调度系统的设计与实现 摘要 本文详细阐述了一个基于Python的半敏捷卫星观测调度系统的设计与实现过程。系统针对半敏捷卫星特有的机动能力限制,综合考虑了地面目标观测需求、卫星资源约束、能源管理等多重因素,提出了一种混合启发式算法解…

软件测试中,常用的抓包工具有哪些?抓包的原理是什么?

回答重点在软件测试中,常用的抓包工具主要有:1)Fiddler2)Wireshark3)Charles4)Postman(它的拦截器功能也可以用于抓包)5)tcpdump抓包的原理大致是通过安装在本地的抓包工…

Cesium学习(二)-地形可视化处理

Cesium地形可视化是其核心功能之一,允许开发者在3D地球中展示真实的地形数据。以下是关于Cesium地形可视化的详细处理方法: 文章目录1. 启用地形可视化基本地形加载自定义地形提供者2. 地形相关操作地形高度采样地形夸张效果3. 地形可视化设置地形照明效…

《告别 if-else 迷宫:Python 策略模式 (Strategy Pattern) 的优雅之道》

《告别 if-else 迷宫:Python 策略模式 (Strategy Pattern) 的优雅之道》 大家好,我是你的朋友,一位与 Python 代码相伴多年的开发者。在我们的编程生涯中,几乎都曾与一种“代码怪兽”搏斗过,它就是那冗长、复杂、牵一发而动全身的 if-elif-else 结构。 每当一个新的需求…

Redis--day7--黑马点评--优惠券秒杀

(以下内容全部来自上述课程)优惠券秒杀 1. 全局唯一ID 每个店铺都可以发布优惠券:当用户抢购时,就会生成订单并保存到tb voucher order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显受单表数据量的限制…

Vue 与 React 深度对比:设计哲学、技术差异与应用场景

一、核心设计理念对比 特性 Vue React 设计目标 渐进式框架,降低学习曲线 构建大型应用,保持灵活性 设计哲学 “约定优于配置” “配置优于约定” 核心思想 响应式数据绑定 函数式编程 + 虚拟DOM 模板语言 HTML-based 模板 JSX(JavaScript XML) 状态管理 内置响应式系统 依…

软件开发 - foreground 与 background

foreground 与 background 1、foreground词性含义n.前景;最突出的位置.v使突出;强调# 例词in the 【foreground】(在最显眼的位置)【foreground】 task(前台任务)【foreground】 color(前景色&a…

深度学习——03 神经网络(2)-损失函数

2 损失函数 2.1 概述作用:衡量模型预测结果(y^\hat{y}y^​)和真实标签(yyy)的差异,差异越大,说明模型参数“质量越差”(需要调整);本质:深度学习训…

【大模型微调系列-04】 神经网络基础与小项目实战

【大模型微调系列-04】 神经网络基础与小项目实战💡 本章目标:通过构建一个能识别手写数字的AI模型,让你真正理解神经网络是如何"学习"的。2-3小时后,你将拥有第一个自己训练的AI模型!4.1 理论讲解&#xff…