前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >09: 图像混合

09: 图像混合

作者头像
CodecWang
发布于 2021-12-07 07:04:55
发布于 2021-12-07 07:04:55
34700
代码可运行
举报
文章被收录于专栏:CodecWangCodecWang
运行总次数:0
代码可运行

学习图片间的数学运算,图像混合。图片等可到文末引用处下载。

目标

  • 图片间的数学运算,如相加、按位运算等
  • OpenCV函数:cv2.add(), cv2.addWeighted(), cv2.bitwise_and()

教程

首先恭喜你已经完成了入门篇的学习噢,接下来我们学习一些OpenCV的基础内容,加油(ง •_•)ง

图片相加

要叠加两张图片,可以用cv2.add()函数,相加两幅图片的形状(高度/宽度/通道数)必须相同。numpy中可以直接用res = img + img1相加,但这两者的结果并不相同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = np.uint8([250])
y = np.uint8([10])
print(cv2.add(x, y))  # 250+10 = 260 => 255
print(x + y)  # 250+10 = 260 % 256 = 4Copy to clipboardErrorCopied

如果是二值化图片(只有0和255两种值),两者结果是一样的(用numpy的方式更简便一些)。

图像混合

图像混合cv2.addWeighted()也是一种图片相加的操作,只不过两幅图片的权重不一样,γ相当于一个修正值:

dst = \alpha\times img1+\beta\times img2 + \gammadst=α×img1+β×img2+γ

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
img1 = cv2.imread('lena_small.jpg')
img2 = cv2.imread('opencv-logo-white.png')
res = cv2.addWeighted(img1, 0.6, img2, 0.4, 0)Copy to clipboardErrorCopied

经验之谈:α和β都等于1时,就相当于图片相加。

按位操作

按位操作包括按位与/或/非/异或操作,有什么用途呢?比如说我们要实现下图的效果:

如果将两幅图片直接相加会改变图片的颜色,如果用图像混合,则会改变图片的透明度,所以我们需要用按位操作。首先来了解一下掩膜(mask)的概念:掩膜是用一副二值化图片对另外一幅图片进行局部的遮挡,看下图就一目了然了:

所以我们的思路就是把原图中要放logo的区域抠出来,再把logo放进去就行了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
img1 = cv2.imread('lena.jpg')
img2 = cv2.imread('opencv-logo-white.png')

# 把logo放在左上角,所以我们只关心这一块区域
rows, cols = img2.shape[:2]
roi = img1[:rows, :cols]

# 创建掩膜
img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)

# 保留除logo外的背景
img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
dst = cv2.add(img1_bg, img2)  # 进行融合
img1[:rows, :cols] = dst  # 融合后放在原图上Copy to clipboardErrorCopied

经验之谈:掩膜的概念在图像混合/叠加的场景下使用较多,可以多多练习噢!

小结

  • cv2.add()用来叠加两幅图片,cv2.addWeighted()也是叠加两幅图片,但两幅图片的权重不一样。
  • cv2.bitwise_and(), cv2.bitwise_not(), cv2.bitwise_or(), cv2.bitwise_xor()分别执行按位与/或/非/异或运算。掩膜就是用来对图片进行全局或局部的遮挡。

接口文档

引用

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目标
  • 教程
    • 图片相加
    • 图像混合
    • 按位操作
  • 小结
  • 接口文档
  • 引用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档