opencv-python常用函数解析及参数介绍(二)——图像填充与图像融合

1.图像填充

函数及参数介绍

在opencv中使用cv2.copyMakeBorder可以进行图像的边界填充,需要的参数为(img, top_size, bottom_size, left_size, right_size, borderType),即(图片,上侧填充值,下侧填充值,左侧填充值,有侧填充值,边框类型)
边框类型的可选参数如下:

参数作用
cv2.BORDER_REPLICATE复制法,也就是复制最边缘像素。
cv2.BORDER_REFLECT反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
cv2.BORDER_REFLECT_101反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
cv2.BORDER_WRAP外包装法cdefgh|abcdefgh|abcdefg
cv2.BORDER_CONSTANT常量法,常数值填充。

其实通过英文也很好记忆,replicate意为重复,就是复制原图像边上的像素作为边框;reflect意为反射,就是以原图像的边作为对称面进行镜像;wrap为平铺,即将图像看作平铺状态下截取的一块;constant为常量,即以一个常量作为像素点填充

演示

假设我们有这样一幅图,名为kl.png

在这里插入图片描述

为了方便演示,我们将借助matplotlib进行显示,但是由于matplotlib显示通道是rgb而opencv显示通道是bgr,所以在读取之后还需要进行通道变换,这里只需要改变通道的排序方式即可

img = cv2.imread('kl.png')
img = img[:,:,::-1]

假设我们需要上下左右各填充50个像素点,我们进行5种填充

top_size,bottom_size,left_size,right_size = (50,50,50,50)

replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)

使用matplotlib显示原图与填充结果

import matplotlib.pyplot as plt
plt.subplot(231), plt.imshow(img), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate), plt.title('REPLICATE')
plt.subplot(233), plt.imshow(reflect), plt.title('REFLECT')
plt.subplot(234), plt.imshow(reflect101), plt.title('REFLECT_101')
plt.subplot(235), plt.imshow(wrap), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant), plt.title('CONSTANT')

plt.show()

在这里插入图片描述

2.图像融合

预处理

首先我们打开两张图片

img_1=cv2.imread('photo.jpg')
img_2=cv2.imread('kl.png')

在进行图像融合之前我们先把图像变成一样大小,假设我们是让第二张图片变成第一张的大小,操作如下

img_2 = cv2.resize(img_2, (img_1.shape[1], img_1.shape[0]))

需要注意的是cv2中图像是shape是(h, w, c)而resize里面的参数是(w, h),所以resize的参数应该是(img_1.shape[1], img_1.shape[0])而不是(img_1.shape[0], img_1.shape[1])

融合以及显示

我们使用cv2.addWeighted进行图像融合

res = cv2.addWeighted(img_1, 0.6, img_2, 0.4, 0)
cv2.imshow('res',res) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

融合后的结果如下
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾醒(AiXing-w)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值