opencv之边界扩展copyMakeBorder

copyMakeBorder可以处理多通道也可以处理单通道

void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType,
const Scalar& value=Scalar() )


假设src为以下矩阵

我们首先只在一个方向上,讨论,例如 top方向:

top =5 或者 10, bottom =0,left 0,right =0;注意我们这里故意让top的值,大于 src的rows,即行数。查看结果

borderType = BORDER_REFLECT:反射


解释:当按BORDER_REFLECT,向上给src加边界时,是按照src的反射机制来加的。

borderType = BORDER_REPLICATE:复制


解释:当BORDER_REPLICATE时,代表只复制边界。

当left=5,bottom =5时,

BORDER_TYPE = BORDER_REFLECT_101:


解释:101,已经表明 0不参加反射机制。也即是以第一行为镜面,做反射

其他的type都很简单不做实验了,。
### 解决 OpenCV 图像处理中的边界异常问题 当使用 OpenCV 进行图像处理时,可能会遇到由于不恰当的边界处理而导致的错误或异常情况。为了有效解决这些问题,了解并应用合适的边界填充方法至关重要。 #### 使用 `copyMakeBorder` 函数进行边界填充 OpenCV 提供了一个名为 `copyMakeBorder` 的函数来实现不同类型的边界填充操作[^1]。此功能允许指定待扩展边界的大小以及所采用的具体填充方式: - **常数填充 (CONSTANT)**:用固定颜色值填充新区域; - **复制边缘像素 (REPLICATE)**:重复最外层的一列或多行; - **反射镜像 (REFLECT)** 和 **环绕模式 (WRAP)** 等其他选项也适用于特定场景下的需求。 下面是一个简单的 Python 代码片段展示如何利用该函数完成基本的任务: ```python import cv2 import numpy as np img = cv2.imread('example.jpg') # 定义要增加到每一边的数量(top, bottom, left, right),单位为像素数目 top_size = bottom_size = left_size = right_size = 50 border_img = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_CONSTANT, value=[255, 0, 0]) # 上述参数value表示蓝色(因为opencv的颜色顺序是BGR) cv2.imshow('Original Image', img) cv2.imshow('Padded Image with Blue Border', border_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 通过上述代码可以看出,在读取图片之后,定义了想要向四个方向上各自添加多少个额外像素作为新的边界宽度;接着调用了 `copyMakeBorder()` 方法,并指定了具体的填充类型和用于填充的颜色(如果适用)。最后显示原始图象及其经过边界扩充后的版本以便对比效果。 对于某些情况下可能发生的文件路径错误或其他原因引起的加载失败问题,则建议尝试替换 `imread` 调用为 `imdecode` 来解析来自内存的数据流而不是直接从磁盘读取文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值