【OpenCV基础】第十五课:边缘处理

图像边缘处理

Posted by x-jeff on December 11, 2020

本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.卷积边界问题

图像卷积时边界像素不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当使用3×3卷积核时有1个像素的边缘没有被处理,使用5×5卷积核时有2个像素的边缘没有被处理。此时我们便需要处理下图像的边缘。

2.边缘处理方法

在卷积开始之前增加边缘像素,比如使用3×3卷积核时在四周各填充1个像素的边缘,这样就确保图像的边缘能够被处理,在卷积处理之后再去掉这些边缘。

👉OpenCV提供的用于边缘填充的API:

1
2
3
4
5
6
7
8
9
10
void copyMakeBorder(
	InputArray src, //输入图像
	OutputArray dst, //添加边缘后的图像
	int top, //上边缘填充长度
	int bottom, //下边缘填充长度
	int left, //左边缘填充长度
	int right, //右边缘填充长度
	int borderType, //边缘填充方法
	const Scalar& value = Scalar() //填充边缘所用的像素值
);

参数int borderType有以下几种取值:

  • BORDER_CONSTANTiiiiii|abcdefgh|iiiiiii
  • BORDER_REPLICATEaaaaaa|abcdefgh|hhhhhhh
  • BORDER_REFLECTfedcba|abcdefgh|hgfedcb
  • BORDER_REFLECT_101gfedcb|abcdefgh|gfedcba
  • BORDER_WRAPcdefgh|abcdefgh|abcdefg
  • BORDER_DEFAULT:即BORDER_REFLECT_101

假设abcdefgh为图像,|......|外侧的值为边缘填充的值。

3.代码地址

  1. 边缘处理