首页 > 其他分享 >OpenCV(cv::copyMakeBorder())

OpenCV(cv::copyMakeBorder())

时间:2024-10-30 10:22:12浏览次数:7  
标签:copyMakeBorder 填充 边框 OpenCV 添加 图像 BORDER cv

目录



cv::copyMakeBorder() 是 OpenCV 中用于给图像添加边框的函数,可以将指定宽度和类型的边框添加到图像的四周。这种操作在图像处理和计算机视觉任务中非常常见,比如在卷积运算中,通过填充边框来避免边界效应影响结果。



1. 函数定义

void cv::copyMakeBorder(
    InputArray src,      // 输入图像
    OutputArray dst,     // 输出图像
    int top,             // 上边框宽度
    int bottom,          // 下边框宽度
    int left,            // 左边框宽度
    int right,           // 右边框宽度
    int borderType,      // 边框类型
    const Scalar& value = Scalar()  // 常数边框填充值(可选)
);

参数说明:

  1. src:输入图像(cv::Mat 类型),可以是单通道或多通道图像。
  2. dst:输出图像,添加边框后的图像。
  3. topbottomleftright:指定四个边框的宽度,即上、下、左、右四边分别添加多少像素的边框。
  4. borderType:边框类型,指定如何填充边框区域。常见的填充方式包括:
    • BORDER_CONSTANT:常量填充,使用 value 指定的颜色进行填充。
    • BORDER_REPLICATE:复制边缘像素,使用图像边界的像素值填充边框。
    • BORDER_REFLECT:边界反射填充,例如 fedcba|abcdefgh|hgfedcb
    • BORDER_WRAP:边界循环填充,例如 cdefgh|abcdefgh|abcdefg
    • BORDER_REFLECT_101BORDER_DEFAULT:类似于 BORDER_REFLECT,但忽略最边缘像素,例如 gfedcb|abcdefgh|gfedcba
    • BORDER_TRANSPARENT:透明填充(适用于带有 Alpha 通道的图像)。
    • BORDER_ISOLATED:对输入图像的边界不做假设,通常在过滤操作中使用。
  5. value:指定常数填充时的颜色值(如:灰度图像为 Scalar(gray_value),彩色图像为 Scalar(blue, green, red))。


2. 示例代码

以下是一个简单的例子,展示如何用 cv::copyMakeBorder() 函数对图像添加不同类型的边框。

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat src = imread("image.jpg");  // 读取图像
    Mat dst;

    // 添加一个常量边框,边框宽度为10像素,边框颜色为蓝色
    copyMakeBorder(src, dst, 10, 10, 10, 10, BORDER_CONSTANT, Scalar(255, 0, 0));

    imshow("Original Image", src);
    imshow("Image with Border", dst);
    waitKey(0);

    return 0;
}


3. 应用场景

  1. 卷积运算的边界填充:在卷积操作中,通常需要给图像边界添加边框,避免卷积核无法完整覆盖边缘像素。
  2. 数据增强:在深度学习中,给图像添加边框并随机裁剪,可以作为一种数据增强方法。
  3. 拼接和对齐:在将图像拼接在一起或进行对齐操作时,使用 cv::copyMakeBorder() 添加统一边框,可以方便后续的操作。


4. 注意事项

  • 添加边框后,输出图像的大小会增加,例如若原始图像大小为 $ W \times H $,且每边添加10像素的边框,最终图像大小将变为 $ (W+20) \times (H+20) $。
  • 对于需要保持透明度的图像,建议使用 BORDER_TRANSPARENT,但需要确保图像具备 Alpha 通道。


标签:copyMakeBorder,填充,边框,OpenCV,添加,图像,BORDER,cv
From: https://www.cnblogs.com/keye/p/18515268

相关文章

  • XCVU13P板卡设计原理图:509-基于XCVU13P的4路QSFP28光纤PCIeX16收发卡
    基于XCVU13P的4路QSFP28光纤PCIeX16收发卡 一、板卡概述     基于XCVU13P的4路QSFP28光纤PCIeX16收发卡。该板卡要求符合PCIe3.0标准,包含一片XCVU13P-2FLGA2014I、4组64-bit/8GBDDR4;4路QSFP284X光纤,每路光纤支持4X25Gbps,双向;支持32路IO。板卡工作温度范围0到60℃,板......
  • Data-Free,多目标域适应合并方案,简单又有效 | ECCV'24
    来源:晓飞的算法工程笔记公众号,转载请注明出处论文:Training-FreeModelMergingforMulti-targetDomainAdaptation论文地址:https://arxiv.org/abs/2407.13771论文代码:https://air-discover.github.io/ModelMerging创新点对域适应的场景解析模型中的模式连通性进......
  • Python从0到100(六十八):Python OpenCV-图像边缘检测及图像融合
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • javaCV图片OCR文字识别
    springboot项目pom文件中添加以下依赖 1<dependency>2<groupId>org.bytedeco</groupId>3<artifactId>javacv-platform</artifactId>4<version>1.5.5</version>5</depend......
  • SpringBoot汽车销售管理系统1cv5c--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表销售员,客户,销售订单,品牌,车系,汽车库存,汽车入库,财务报表开题报告内容一、课题背景与意义随着汽车市场的不断扩大,汽车销售管理变得日益复杂。为了提高销售......
  • NVR设备ONVIF接入平台EasyCVR视频分析设备平台视频质量诊断技术与能力
    视频诊断技术是一种智能化的视频故障分析与预警系统,NVR设备ONVIF接入平台EasyCVR通过对前端设备传回的码流进行解码以及图像质量评估,对视频图像中存在的质量问题进行智能分析、判断和预警。这项技术在安防监控领域尤为重要,因为它能够确保监控系统的正常运行,提高视频监控的可靠性和......
  • 萤石设备视频接入平台EasyCVR私有化部署视频平台高速公路视频上云的高效解决方案
    经济的迅猛发展带来了高速公路使用频率的激增,其封闭、立交和高速的特性变得更加显著。然而,传统的人工巡查方式已不足以应对当前高速公路的监控挑战,监控盲点和响应速度慢成为突出问题。比如,非法占用紧急车道的情况屡见不鲜,却因缺乏即时监控和确凿证据,给执法带来了不小的挑战。在许......
  • vins-fusion gpu, docker, opencv4.5.4(cuda) 复现
    代码:https://gitee.com/zheng-yongjie/vins-fusion-gpu-cv4?skip_mobile=true硬件:jetsonxaviernx,系统20.04nvcc-V可查看cuda版本本文在docker里面复现1.opencvcuda安装root@ubuntu:~#pwd/rootwget-Oopencv-4.5.4.ziphttps://github.com/opencv/opencv/archi......
  • SpringBoot汽车销售管理系统1cv5c 程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:销售员,客户,销售订单,品牌,车系,汽车库存,汽车入库,财务报表开题报告内容一、研究背景随着汽车市场的不断扩大和竞争的日益激烈,汽车销售管理系统的需......
  • C++之OpenCV入门到提高002:加载、修改、保存图像
    一、介绍今天是这个系列《C++之Opencv入门到提高》得第二篇文章。今天这个篇文章很简单,只是简单介绍如何使用Opencv加载图像、显示图像、修改图像和保存图像,先给大家一个最直观的感受。但是,不能认为很简单,只是让学习的过程没那么平滑一点,以后的路就好走了。OpenCV具......