OpenCV图像处理技巧:使用cv2.copyMakeBorder()实现图像边界填充

        

目录

1、什么是cv2.copyMakeBorder()函数?

2、函数参数解析

3、示例代码

4、结论


当你在处理图像时,有时候你可能需要调整图像的大小,使其符合特定的尺寸或者比例。然而,在调整图像大小的过程中,你可能会遇到一个问题,那就是图像的边界处理。图像调整大小后,常常会导致边界出现空白区域,这会影响图像的美观度。为了解决这个问题,OpenCV库中提供了一个非常方便的函数——cv2.copyMakeBorder(),它可以帮助你对图像进行边界填充。

1、什么是cv2.copyMakeBorder()函数?

        cv2.copyMakeBorder()是OpenCV库中的一个函数,用于给图像添加额外的边界(padding)。它的主要作用是在图像的边界上添加一些额外的像素值,以改变图像的大小或者比例,而同时保持图像的整体结构不变。

2、函数参数解析

这个函数有以下几个参数:

src: 要扩充边界的原始图像。
top, bottom, left, right: 分别表示在图像的上、下、左、右四个方向上的边框宽度。
borderType: 定义要添加边框的类型,它可以是以下几种:
cv2.BORDER_CONSTANT: 添加的边界框像素值为常数,需要额外再给定一个参数。
cv2.BORDER_REFLECT: 添加的边界像素将是边界元素的镜面反射。
cv2.BORDER_REFLECT_101 或 cv2.BORDER_DEFAULT:类似于cv2.BORDER_REFLECT,但是有一些细微的不同。
cv2.BORDER_REPLICATE:使用最边界的像素值代替。
cv2.BORDER_WRAP:左右两边替换。

3、示例代码

下面是一个使用cv2.copyMakeBorder()函数的示例代码:

import cv2

# 读取图像
zl = cv2.imread('picture.png')

# 设置边框宽度
top, bottom, left, right = 50, 50, 50, 50

# 添加不同类型的边框
constant = cv2.copyMakeBorder(picture, top, bottom, left, right, borderType=cv2.BORDER_CONSTANT, value=0)
reflect = cv2.copyMakeBorder(picture, top, bottom, left, right, borderType=cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(picture, top, bottom, left, right, borderType=cv2.BORDER_REFLECT101)
replicate = cv2.copyMakeBorder(picture, top, bottom, left, right, borderType=cv2.BORDER_REPLICATE)
wrap = cv2.copyMakeBorder(picture, top, bottom, left, right, borderType=cv2.BORDER_WRAP)

# 显示结果
cv2.imshow('ORIGINAL', picture)
cv2.imshow('CONSTANT', constant)
cv2.imshow('REFLECT', reflect)
cv2.imshow('REFLECT_101', reflect101)
cv2.imshow('REPLICATE', replicate)
cv2.imshow('WRAP', wrap)

cv2.waitKey(0)
cv2.destroyAllWindows()

        当我们看示例代码时,我们首先需要导入OpenCV库,以便使用其中的函数。然后,我们加载了一张图像(在这个例子中,图像名为'picture.png'),该图像将用作我们的示例。

        接下来,我们定义了四个变量:topbottomleftright,它们分别代表了在图像的四个边界上要添加的像素数。在这个示例中,我们将每个边界的宽度设置为50个像素。

        接着,我们使用cv2.copyMakeBorder()函数来为原始图像添加不同类型的边框。这里我们展示了五种不同类型的边框:

①cv2.BORDER_CONSTANT:使用常数填充边框。

②cv2.BORDER_REFLECT:通过图像边界的镜像反射填充边框。

③cv2.BORDER_REFLECT_101cv2.BORDER_DEFAULT:与cv2.BORDER_REFLECT类似,但有一些微小差异。

④cv2.BORDER_REPLICATE:使用最边界的像素值填充边框。

⑥cv2.BORDER_WRAP:左右两边替换填充。

        最后,我们使用cv2.imshow()函数将原始图像和添加边框后的图像显示在屏幕上。cv2.waitKey(0)用于等待用户按下任意键盘按键后继续执行代码,而cv2.destroyAllWindows()用于关闭所有打开的窗口,释放资源。

4、结论

        通过使用cv2.copyMakeBorder()函数,你可以轻松地对图像进行边界填充,以满足不同场景下的需求。你可以根据具体情况选择不同的边框类型,并根据需要调整边框的宽度和颜色。这个函数在图像处理中具有广泛的应用,尤其在图像预处理和数据增强等领域有着重要的作用。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值