为什么会用到 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 相同。