BorderTypes 枚举
1. 头文件
#include <opencv2/core/base.hpp>
2. 说明
各种边界类型,图像边界用 |
表示
3. 枚举器
enum cv::BorderTypes {
cv::BORDER_CONSTANT = 0,
cv::BORDER_REPLICATE = 1,
cv::BORDER_REFLECT = 2,
cv::BORDER_WRAP = 3,
cv::BORDER_REFLECT_101 = 4,
cv::BORDER_TRANSPARENT = 5,
cv::BORDER_REFLECT101 = BORDER_REFLECT_101,
cv::BORDER_DEFAULT = BORDER_REFLECT_101,
cv::BORDER_ISOLATED = 16
}
枚举值 | C | Python | 说明 |
---|---|---|---|
0 | BORDER_CONSTANT | cv.BORDER_CONSTANT | iiiiii|abcdefgh|iiiiiii , 需要指定 ’ i ’ 即就是边沿像素用i替换。 |
1 | BORDER_REPLICATE | cv.BORDER_REPLICATE | aaaaaa|abcdefgh|hhhhhhh 复制边界像素 |
2 | BORDER_REFLECT | cv.BORDER_REFLECT | fedcba|abcdefgh|hgfedcb 反射复制边界像素 |
3 | BORDER_WRAP | cv.BORDER_WRAP | cdefgh|abcdefgh|abcdefg 用另一边的像素来补偿填充 |
4 | BORDER_REFLECT_101 | cv.BORDER_REFLECT_101 | gfedcb|abcdefgh|gfedcba 以边界为对称轴反射复制像素 |
5 | BORDER_TRANSPARENT | cv.BORDER_TRANSPARENT | uvwxyz|abcdefgh|ijklmno |
4 | BORDER_REFLECT101 | cv.BORDER_REFLECT101 | 与BORDER_REFLECT_101 相同 |
4 | BORDER_DEFAULT | cv.BORDER_DEFAULT | 与BORDER_REFLECT_101 相同,为默认填充方式 |
16 | BORDER_ISOLATED | cv.BORDER_ISOLATED | 不看ROI之外部分 |
4. 使用原理
📌 问题:
图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有跟 kernel 完全重复或者没有被kernel 的锚点覆盖,所以当 3 × 3 3×3 3×3滤波时,边缘有 1个像素没有被卷积处理, 5 × 5 5×5 5×5时就会有2个边缘像素没有被处理掉, 7 × 7 7×7 7×7就会有3个 …
📢 OpenCV解决方案:
在卷积开始之前增加边缘像素,填充的像素值为0 或者 RGB黑色,比如在 3 × 3 3×3 3×3的四周各填充一个像素的边缘,边缘便会被处理到。在卷积之后再去掉这些边缘。