社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python+OpenCV教程基础篇:图像混合

天池大数据科研平台 • 4 年前 • 441 次点击  

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

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.40)

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

三  按位操作

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

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

所以我们的思路就是把原图中要放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/






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

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

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


点击下方图片即可阅读

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

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

学好Scikit-Learn,

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


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



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

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


👇「阅读原文」,PC端fork学习更容易!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/32847
 
441 次点击