/* 核心作用:为图像四周添加边框(填充 / Padding),解决边缘处理、尺寸适配、算法边界问题。
- 图像扩展:将原图复制到新图像中心,在上下左右增加指定像素宽度的边框。
- 边界填充:通过多种算法(常量、复制、反射等)填充新增边框区域。
- 底层用途:OpenCV 内部滤波(卷积、模糊、边缘检测)时,自动调用它处理边缘,避免边缘像素计算失效。
- void CvInvoke.CopyMakeBorder(
IInputArray src, // 输入图像 (Mat)
IOutputArray dst, // 输出图像 (Mat,尺寸更大)
int top, // 顶部边框宽度 (像素)
int bottom, // 底部边框宽度
int left, // 左边边框宽度
int right, // 右边边框宽度
BorderType borderType, // 边框填充类型
MCvScalar value // 常量填充时的颜色 (BGR)
)
四、典型应用场景(你上位机 / 视觉项目必用)
- 卷积 / 滤波 / 形态学操作(核心场景)
问题:Sobel、高斯模糊、膨胀、腐蚀时,边缘像素无足够邻域,会出现黑边或计算错误。
解决:先用 CopyMakeBorder 扩展图像(通常 Reflect101),滤波后再裁掉边框,保证边缘完整处理。 - 图像尺寸统一(深度学习 / 模型输入)
网络要求固定尺寸(如 640x640),直接缩放会拉伸变形。
用 BORDER_CONSTANT 填充黑边,保持原图比例,强制对齐尺寸。 - 旋转 / 透视变换(防裁剪)
图像旋转后四角会被裁剪。
先扩边(top/left=50, bottom/right=50),再旋转,内容完整保留。 - 图像拼接 / 平铺(无缝纹理)
制作纹理、全景拼接时,用 REFLECT 让边缘自然过渡、无接缝。 - 视觉定位 / ROI 扩展
找轮廓 / 圆 / 矩形后,向外扩边(如 10px),避免裁剪特征区域。
*/
算法函数:Cv2.CopyMakeBorder
定义
void CopyMakeBorder(Mat src, Mat dst, int top, int bottom, int left, int right, BorderTypes borderType);
参数详解
- top/bottom/left/right:四边填充像素
- 默认:0
- 范围:0 ~ 200
- 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;
}
若文章对您有帮助,可以激励一下我哦,祝您平安幸福!
| 微信 | 支付宝 |
|---|---|
![]() |
![]() |

