0%

OpenCV 中的 BorderTypes

参考链接

为什么会用到 BorderTypes?

当你对图像进行某些操作时,例如卷积(即图像滤波),操作需要访问像素周围的一些像素值来计算结果。如果你对图像中靠近边缘的像素执行这些操作,算法可能会尝试访问图像之外的像素,而这些像素并不存在,这时就需要指定如何处理这些边界。

cv::BorderTypes 提供了几种处理方式。

在接下来的例子中,例子被 | 分割为了三个部分,左右分别表示两侧的边界,中间表示图像数据。

BORDER_CONSTANT

iiiiii|abcdefgh|iiiiiii 这里的 i 是指定的。

BORDER_REPLICATE

aaaaaa|abcdefgh|hhhhhhh 由边界的像素扩展得到。简单来说,边缘的像素会被“复制”出来。

BORDER_REFLECT

fedcba|abcdefgh|hgfedcb 镜像反射边界区域。

BORDER_WRAP

cdefgh|abcdefgh|abcdefg 把图像当作一个环来处理,边界部分会用图像的另一边填充。

BORDER_TRANSPARENT

uvwxyz|abcdefgh|ijklmno 将异常值视为透明的。

BORDER_REFLECT_101 / BORDER_REFLECT101

gfedcb|abcdefgh|gfedcba 与 BORDER_REFLECT 类似,但是跳过了边缘的一个像素点去反射。

BORDER_DEFAULT

默认值。效果与 BORDER_REFLECT_101 相同。