当前位置: 首页 > news >正文

计算机视觉(opencv)实战二——图像边界扩展cv2.copyMakeBorder()

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.dtcms.com/a/330603.html

相关文章:

  • 机器学习 - Kaggle项目实践(3)Digit Recognizer 手写数字识别
  • 分布式事务、锁、链路追踪
  • 读取数据excel
  • 高效TypeScript开发:VSCode终极配置指南
  • 待办事项小程序开发
  • (第十六期)HTML布局标签详解:div与span的深度解析
  • 【读代码】深度解析 context-engineering-intro:开源上下文工程实践原理与应用
  • 群晖 NAS 影音访问:通过 cpolar 内网穿透服务实现 Nastool 远程管理
  • java集合 之 多列集合
  • Python/Node.js 调用taobao API:构建实时商品详情数据采集服务
  • 使用HalconDotNet实现异步多相机采集与实时处理
  • Mybatis学习笔记(六)
  • 桥接模式C++
  • 成都国际影像产业园:接重庆五一职院实训就业考察
  • [系统架构设计师]软件工程基础知识(五)
  • 系统思考:转型困扰与突破
  • 【软考中级网络工程师】知识点之入侵检测深度剖析
  • 开源安全云盘存储:Hoodik 实现端到端数据加密,Docker快速搭建
  • 分享一个基于Hadoop+spark的超市销售数据分析与可视化系统,超市顾客消费行为分析系统的设计与实现
  • Java应用架构实战指南:主流模式解析与Spring落地实践
  • 从零开始学Python之数据结构(字符串以及数字)
  • Java 大视界 -- Java 大数据机器学习模型在金融欺诈检测与防范策略制定中的应用(397)
  • 工业一体机5G通讯IC/ID刷卡让MES系统管理更智能
  • 第四天~在CANFD或CAN2.0的ARXML文件中实现Multiplexor多路复用信号实战
  • 怎么判断晶振的好坏,有什么简单的办法
  • AR技术赋能电力巡检:智能化升级的“秘密武器”
  • 计算机视觉(opencv)实战三——图像运算、cv2.add()、cv2.addWeighted()
  • 设计模式笔记_行为型_责任链模式
  • 【论文阅读 | CVPR 2024 | UniRGB-IR:通过适配器调优实现可见光-红外语义任务的统一框架】
  • linux 内核 - 内存管理的层次化结构