目录
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() // 常数边框填充值(可选)
);
参数说明:
src
:输入图像(cv::Mat
类型),可以是单通道或多通道图像。dst
:输出图像,添加边框后的图像。top
、bottom
、left
、right
:指定四个边框的宽度,即上、下、左、右四边分别添加多少像素的边框。borderType
:边框类型,指定如何填充边框区域。常见的填充方式包括:BORDER_CONSTANT
:常量填充,使用value
指定的颜色进行填充。BORDER_REPLICATE
:复制边缘像素,使用图像边界的像素值填充边框。BORDER_REFLECT
:边界反射填充,例如fedcba|abcdefgh|hgfedcb
。BORDER_WRAP
:边界循环填充,例如cdefgh|abcdefgh|abcdefg
。BORDER_REFLECT_101
或BORDER_DEFAULT
:类似于BORDER_REFLECT
,但忽略最边缘像素,例如gfedcb|abcdefgh|gfedcba
。BORDER_TRANSPARENT
:透明填充(适用于带有 Alpha 通道的图像)。BORDER_ISOLATED
:对输入图像的边界不做假设,通常在过滤操作中使用。
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. 应用场景
- 卷积运算的边界填充:在卷积操作中,通常需要给图像边界添加边框,避免卷积核无法完整覆盖边缘像素。
- 数据增强:在深度学习中,给图像添加边框并随机裁剪,可以作为一种数据增强方法。
- 拼接和对齐:在将图像拼接在一起或进行对齐操作时,使用
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