OpenCV(cv::copyMakeBorder())



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×H,且每边添加10像素的边框,最终图像大小将变为 (W+20)×(H+20)
  • 对于需要保持透明度的图像,建议使用 BORDER_TRANSPARENT,但需要确保图像具备 Alpha 通道。


posted @   做梦当财神  阅读(334)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示