图像处理中经常遇到使用当前像素邻的像素来计算当前像素位置的某些属性值,这样就会导致边界像素处越界访问,一般有两种方法解决这种问题:只对不越界的像素进行处理;对图像边界进行拓展,本文主要介绍如何使用OpenCV简单的对边界进行拓展。
边界的拓展方式
OpenCV提供了几种不同的边界拓展策略:
* BORDER_REPLICATE: aaaaaa|abcdefgh|hhhhhhh
* BORDER_REFLECT: fedcba|abcdefgh|hgfedcb
* BORDER_REFLECT_101: gfedcb|abcdefgh|gfedcba
* BORDER_WRAP: cdefgh|abcdefgh|abcdefg
* BORDER_CONSTANT: iiiiii|abcdefgh|iiiiiii with some specified ’i’
以上内容取自OpenCV的帮助文档。其中 “|” 表示的是图像的边界,连个“|”中间是图像的内容,最后一个边界拓展策略还要额外给定一个i值,用于对额外的边界进行赋值。
边界拓展
使用OpenCV提供的函数copyMakeBorder()来拓展边界,其原型如下
void copyMakeBorder( InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value=Scalar() )
src:输入的数组。
dst:输出的拓展边界后的数组。