OpenCV卷积边界处理(copyMakeBorder)

   进行卷积处理图片时,在图片的边界,核心没有足够元素纳入计算,OpenCV里用copyMakeBorder()函数将原图稍微放大,再开始进行卷积,OpenCV在空间滤波的 相关函数内部已包含copyMakeBorder()了,所以实际在使用空间滤波时,不需要呼叫copyMakeBorder()。

  OpenCV里进行卷积时,处理边界问题通常分为3个步骤:

1,先将原始图片的资料,复制到稍大的图片中。

2,将边界外推,有几种BORDER形态决定外推值,以下列出几个常见的:

BORDER_CONSTANT: 外推的值为常数,常用在仿射变换、透视变换 中使用。

BORDER_REPLICATE: 外推的值和边界值相同,OpenCV的medianBlur默认的处理方式

BORDER_REFLECT_101: 外推像素值和边缘相同,OpenCV的 filter2D(卷积函数)、GaussianBlur(高斯滤波)、BilateralFilter(双边滤波)默认的处理方式。

3.处理完后将外推的部分切掉,使得输出图和输入图大小相同

copyMakeBorder()为上述的第一二步骤,就是输入来源图,得到一个稍大点外出图。

 

边界复制 void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left,int right, int borderType, const Scalar& value= Scalar());

  • src: 输入图

  •  dst: 输出图,深度和输入图相同,尺寸会依赖输入参数而变得稍大,Size(src.colls+left+right,src.rows+top+bottom)。  

  •  top、bottom、left、right:上下左右分别外推多少像素

  •  borderType:边线形态

  •  value: 当borderType为BORDER_CONSTANT,此为外推的值    

以下示例两种形态的边界扩充 :

Mat src = imread("test.jpg",CV_LOAD_IMAGE_UNCHANGE);
Mat dst1;
Mat dst2;
copyMakeBorder(src,dst1,5,5,5,5,BORDER_CONTANT,Scalar(255,0,0));
copyMakeBorder(src,dst2,5,5,5,5,BORDER_REPLICATE);
imshow("src_img",src);
imshow("dst1_img",dst1);
imshow("dst2_img",dst2);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落寞的雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值