在图像处理的时候,我们会面临对边界的处理问题。 在OpenCV中的滤波操作,得到的输出图像与源图像的形状是一样的。 为了实现这种效果,OpenCV采用的是一种方法是在源图像周围添加虚拟像素。 下面有以下几种方式添加虚拟像素:
示意图如下所示:
大多数情况下,cv::BORDER_REFLECT_101是OpenCV默认的选项,cv::BORDER_DEFAULT对应的就是cv::BORDER_REFLECT_101。在OpenCV上,cv::copyMakeBorder()函数就是为图像创建边框的函数。
如下图实验:
在某些情况下,我们需要计算某一特定像素所参考的像素的位置。
举个例子:
可以在混合的边界条件下计算一个特定像素的值,在一维中使用BORDER_REFLECT_101,在另一个维度中使用BORDER_WRAP:
float val; = img.at<float>(cv::borderInterpolate(100, img.rows, BORDER_REFLECT_101,
cv::borderInterpolate(-5, img.cols, BORDER_WRAP));