温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python中opencv图像混合算术运算的示例分析

发布时间:2021-09-03 13:18:22 来源:亿速云 阅读:135 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关python中opencv图像混合算术运算的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

图片相加 cv2.add()       

 要叠加两张图片,可以用 cv2.add() 函数,相加两幅图片的形状(高度 / 宽度 / 通道数)必须相同。
        numpy中可以直接用res = img + img1相加,但这两者的结果并不相同(看下边代码):
        add()两个图片进行加和,大于255的使用255计数.
        numpy会对结果取256(相当于255+1)的模:

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

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

实验图片:

python中opencv图像混合算术运算的示例分析

python中opencv图像混合算术运算的示例分析

 add()后效果

python中opencv图像混合算术运算的示例分析

 相减、相乘、相除:

  •  subtract(img1,img2)  # 相减,可以用于目标检测m

  • ultiply(img1,img2) # 相乘

  • divide(img1,img2) # 相除

 图像融合、混合addWeighted()

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

python中opencv图像混合算术运算的示例分析

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

 效果:

python中opencv图像混合算术运算的示例分析

 α和β都等于1时,就相当于图片相加。

按位运算

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

python中opencv图像混合算术运算的示例分析

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

python中opencv图像混合算术运算的示例分析

 所以我们的思路就是把原图中要放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 # 融合后放在原图上

 掩膜的概念在图像混合/叠加的场景下使用较多。

上边我们使用了

  • 按位与 bitwise_and(roi, roi, mask=mask_inv)

  • 非运算 bitwise_not(mask)

除了按位与、非运算还有:

  • 或运算 bitwise_or(img1,img2)

  • 异或运算 bitwise_xor(img1,img2) 

关于“python中opencv图像混合算术运算的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI