Opencv中文网

边缘填充(CopyMakeBorder)

/* 核心作用:为图像四周添加边框(填充 / Padding),解决边缘处理、尺寸适配、算法边界问题。

  • 图像扩展:将原图复制到新图像中心,在上下左右增加指定像素宽度的边框。
  • 边界填充:通过多种算法(常量、复制、反射等)填充新增边框区域。
  • 底层用途:OpenCV 内部滤波(卷积、模糊、边缘检测)时,自动调用它处理边缘,避免边缘像素计算失效。
  • void CvInvoke.CopyMakeBorder(
    IInputArray src, // 输入图像 (Mat)
    IOutputArray dst, // 输出图像 (Mat,尺寸更大)
    int top, // 顶部边框宽度 (像素)
    int bottom, // 底部边框宽度
    int left, // 左边边框宽度
    int right, // 右边边框宽度
    BorderType borderType, // 边框填充类型
    MCvScalar value // 常量填充时的颜色 (BGR)
    )
    四、典型应用场景(你上位机 / 视觉项目必用)
  1. 卷积 / 滤波 / 形态学操作(核心场景)
    问题:Sobel、高斯模糊、膨胀、腐蚀时,边缘像素无足够邻域,会出现黑边或计算错误。
    解决:先用 CopyMakeBorder 扩展图像(通常 Reflect101),滤波后再裁掉边框,保证边缘完整处理。
  2. 图像尺寸统一(深度学习 / 模型输入)
    网络要求固定尺寸(如 640x640),直接缩放会拉伸变形。
    用 BORDER_CONSTANT 填充黑边,保持原图比例,强制对齐尺寸。
  3. 旋转 / 透视变换(防裁剪)
    图像旋转后四角会被裁剪。
    先扩边(top/left=50, bottom/right=50),再旋转,内容完整保留。
  4. 图像拼接 / 平铺(无缝纹理)
    制作纹理、全景拼接时,用 REFLECT 让边缘自然过渡、无接缝。
  5. 视觉定位 / ROI 扩展
    找轮廓 / 圆 / 矩形后,向外扩边(如 10px),避免裁剪特征区域。
    */

算法函数:Cv2.CopyMakeBorder

定义

void CopyMakeBorder(Mat src, Mat dst, int top, int bottom, int left, int right, BorderTypes borderType);

参数详解

  1. top/bottom/left/right:四边填充像素
    • 默认:0
    • 范围:0 ~ 200
  2. borderType:填充模式
    • Constant:固定纯色填充(默认黑色)
    • Reflect:镜像反射填充,过渡自然
    • Replicate:延伸边缘像素填充

调用示例

Cv2.CopyMakeBorder(src,dst,10,10,10,10,BorderTypes.Constant);
public override Mat Execute(Mat src)
{
    if (src == null || src.Empty())
    {
        Success = false;
        Message = "输入图像为空";
        return null;
    }

    Mat dst = new Mat();
    Cv2.CopyMakeBorder(
        src,
        dst,
        Top,
        Bottom,
        Left,
        Right,
        BorderType,
        BorderColor.Color
    ); 

    Success = true;
    Message += $"边缘填充完成 | 模式:{BorderType}";
    return dst;
}

copyright @重庆教主 WPF中文网 联系站长:(QQ)23611316 (微信)movieclip (QQ群).NET小白课堂:864486030 | 本文由WPF中文网原创发布,谢绝转载 渝ICP备2023009518号-1