opencv 二值化_Python+OpenCV教程基础篇:图像混合

学习图片间的数学运算,图像混合。图片等可到源码处下载。

0ccecc5cda0c011bf0b2c9c5de3c01b7.png

01

目标

  • 图片间的数学运算,如相加、按位运算等

  • OpenCV函数:cv2.add(), cv2.addWeighted(), cv2.bitwise_and()

02

教程

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

一  图片相加

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

import cv2import numpy as np x = np.uint8([250])y = np.uint8([10])print(cv2.add(x, y))  # 250+10 = 260 => 255print(x + y)  # 250+10 = 260 % 256 = 4

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

二  图像混合

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

dst=α×img1+β×img2+γ

img1 = cv2.imread('lena_small.jpg')img2 = cv2.imread('opencv-logo-white.png')res = cv2.addWeighted(img1, 0.6, img2, 0.4, 0)
0ccecc5cda0c011bf0b2c9c5de3c01b7.png

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

三  按位操作

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

b8706bcea0bebd95a2e08be58dcc3ac6.png

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

e2f99d472211dbcaab8226a76da705c5.png

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

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  # 融合后放在原图上

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

03

小结

  • cv2.add()用来叠加两幅图片,cv2.addWeighted()也是叠加两幅图片,但两幅图片的权重不一样。

  • cv2.bitwise_and(),cv2.bitwise_not(),cv2.bitwise_or(),

    cv2.bitwise_xor()分别执行按位与/或/非/异或运算。掩膜就是用来对图片进行全局或局部的遮挡。

    文章转载自: EX2TRON'S BLOG

    http://ex2tron.wang/opencv-python-image-blending/

f2600a3af1b76914101e533f1ffe3bd1.png

如果你也有想分享的干货,可以登录天池实验室(notebook),包括赛题的理解、数据分析及可视化、算法模型的分析以及一些核心的思路等内容

小天会根据你分享内容的数量以及程度,给予丰富的神秘天池大礼以及粮票奖励。分享成功后你也可以通过下方钉钉群?主动联系我们的社区运营同学(钉钉号:yiwen1991)

fefb85bb404e9f27b5aa0eeefd24ec21.png

天池宝贝们有任何问题,可在戳“留言”评论或加入钉钉群留言,小天会认真倾听每一个你的建议!

3ab72f3bb0e2494388d9f481875b5b46.gif

点击下方图片即可阅读

76a874c49b2efbeddc56bdab4a89bd9e.png

那么如何了解线性回归的原理和算法呢?

dbb075b339a4ffe2c2637f568395ad03.png

分类算法评估中的“它们”有什么用处?

274ec32ee39173e4bfdc49e55277fd23.png

学好Scikit-Learn,

于是你默默地推了一下酷酷的墨镜【上篇】

274ec32ee39173e4bfdc49e55277fd23.png

学会PyTorch,你就是这条街上最靓的仔~

f2600a3af1b76914101e533f1ffe3bd1.png

如果你也有想分享的干货,可以登录天池实验室(notebook),包括赛题的理解、数据分析及可视化、算法模型的分析以及一些核心的思路等内容

小天会根据你分享内容的数量以及程度,给予丰富的神秘天池大礼以及粮票奖励。分享成功后你也可以通过下方钉钉群?主动联系我们的社区运营同学(钉钉号: yiwen1991)

fefb85bb404e9f27b5aa0eeefd24ec21.png

be8776c5ef495ecd8f11ac6a41c28787.gif bae032f95582d9d08fd12fc914b8b870.png

?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值