python opencv图像叠加/图像融合/mask掩模

目录

1、图像叠加

2、图像融合

3、图像mask掩模(包括按位AND,OR,NOT和XOR运算)


1、图像叠加

可以通过OpenCV函数cv.add()或简单地通过numpy操作添加两个图像,res = img1 + img2.两个图像应该具有相同的深度和类型,或者第二个图像可以是标量值.

import cv2
import numpy as np

img1 = cv2.imread('4.jpg')
img2 = cv2.imread('1.jpg')

imgadd = cv2.add(cv2.resize(img1,(200,200)),cv2.resize(img2,(200,200)))
cv2.imshow('imgadd',imgadd)
cv2.waitKey(0)

叠加结果:如果叠加两个图像,它将改变颜色

2、图像融合

图像加法,但是对图像赋予不同的权重(0到1之间),使得它具有混合感或透明感。

# 图像融合
combine = cv2.addWeighted(cv2.resize(img1,(200,200)),0.5,cv2.resize(img2,(200,200)),0.5,0)

cv2.imshow('combine',combine)
cv2.waitKey(0)

 结果:如果融合两个图像,会得到一个透明的效果. 

 

3、图像mask掩模(包括按位AND,OR,NOT和XOR运算)

.
目的:希望将opencv徽标放在图像上方

  1. 如果叠加两个图像,它将改变颜色
  2. 如果融合两个图像,会得到一个透明的效果. 我希望它不透明
  3. 如果它是一个矩形区域,我可以使用ROI按之前描述的操作
  4. 但是opencv徽标并不是矩形,可以按位操作完成相关功能
img2 = cv2.resize(img2,(100,100))

# I want to put logo on top-left corner, So I create a ROI
#首先获取原始图像roi
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]

#原始图像转化为灰度值
# Now create a mask of logo and create its inverse mask also
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)

cv2.imshow('img2gray',img2gray)
cv2.waitKey(0)
'''
将一个灰色的图片,变成要么是白色要么就是黑色。(大于规定thresh值就是设置的最大值(常为255,也就是白色))
'''
#将灰度值二值化,得到ROI区域掩模
ret, mask = cv2.threshold(img2gray, 200, 255, cv2.THRESH_BINARY)

cv2.imshow('mask',mask)
cv2.waitKey(0)

#ROI掩模区域反向掩模
mask_inv = cv2.bitwise_not(mask)

cv2.imshow('mask_inv',mask_inv)
cv2.waitKey(0)

#掩模显示背景
# Now black-out the area of logo in ROI
img1_bg = cv2.bitwise_and(roi,roi,mask = mask)

cv2.imshow('img1_bg',img1_bg)
cv2.waitKey(0)

#掩模显示前景
# Take only region of logo from logo image.
img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)
cv2.imshow('img2_fg',img2_fg)
cv2.waitKey(0)

#前背景图像叠加
# Put logo in ROI and modify the main image
dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst

cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()


img1[0:rows, 0:cols ] = dst

cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

 结果:

灰度图

 

灰度图

二值化掩模             二值化掩模取反     ROI背景提取        ROI前景提取          ROI前背景融合

最终融合: 

 

 

 

 

  • 52
    点赞
  • 267
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: Python OpenCV可以通过addWeighted()函数实现图像叠加。该函数可以将两个图像按照一定比例进行加权叠加,生成一个新的图像。具体实现方法如下: 1. 读取两张待叠加图像,可以使用cv2.imread()函数。 2. 将两张图像进行resize()操作,使它们的大小相同。 3. 使用addWeighted()函数将两张图像按照一定比例进行加权叠加,生成一个新的图像。 4. 将叠加后的图像保存到本地,可以使用cv2.imwrite()函数。 示例代码如下: ``` import cv2 # 读取两张待叠加图像 img1 = cv2.imread('image1.jpg') img2 = cv2.imread('image2.jpg') # 将两张图像进行resize操作,使它们的大小相同 img1 = cv2.resize(img1, (img2.shape[1], img2.shape[0])) # 使用addWeighted函数将两张图像按照一定比例进行加权叠加,生成一个新的图像 dst = cv2.addWeighted(img1, 0.5, img2, 0.5, 0) # 将叠加后的图像保存到本地 cv2.imwrite('result.jpg', dst) ``` 在上面的代码中,我们将两张图像按照相同的比例进行加权叠加,生成了一张新的图像。其中,addWeighted()函数的第一个参数表示第一张图像,第二个参数表示第一张图像的权重,第三个参数表示第二张图像,第四个参数表示第二张图像的权重,第五个参数表示叠加后的图像的亮度值。 ### 回答2: 在Python中,使用OpenCV库可以实现图像叠加图像叠加是将两张图像叠加在一起,使它们在同一画布中显示的过程。我们可以利用这一功能实现一些有趣的应用,例如添加水印、将两个图像融合、对比度和亮度调整等等。 实现图像叠加需要以下步骤: 1. 读入需要叠加的两张图片,确保它们的大小相同。 2. 利用OpenCV中的add()函数实现图片叠加。add()函数的参数为两张图片和一个权重参数,它可以将两张图片按一定比例进行加权叠加。 3. 确定权重参数的值,通过调节权重参数可以控制两张图片叠加比例。当权重参数为0时,只显示第一张图片;当权重参数为1时,只显示第二张图片。通过调节权重参数在0和1之间的值可以将两张图片按各自所占比例进行叠加。 下面是一个简单的代码示例,实现两张图片叠加: ``` import cv2 # 读取两张需要叠加图片 img1 = cv2.imread("image1.jpg") img2 = cv2.imread("image2.jpg") # 确定权重参数值 alpha = 0.5 # 图片叠加,输出结果 result = cv2.addWeighted(img1, alpha, img2, 1-alpha, 0) cv2.imshow("result", result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个示例中,我们读取了两张图片,将它们按0.5的比例进行加权叠加,最后输出叠加后的结果。 需要注意的是,当两张需要叠加图片大小不一致时,需要使用resize()函数将较小的图片进行缩放,以使它们能够正确地叠加在一起。 除此之外,我们还可以利用叠加函数实现更复杂的应用,例如将两张图片按一定透明度进行融合、利用阈值处理将两张图片融合等等。同时,OpenCV还提供了很多其他的图像处理函数,可以实现许多有趣的应用。 ### 回答3: Python中的OpenCV库是图像处理和计算机视觉领域的一个强大工具。图像叠加是一种在图像处理中常用的技术,它可以帮助我们将多张图像合成为一幅图像,常用于水印叠加、透明图片合成等场景中。 在Python中,我们可以使用OpenCV库里的cv2.addWeighted方法来实现图像叠加。该方法的语法如下: dst = cv2.addWeighted(img1, alpha, img2, beta, gamma) 其中,img1和img2是需要合成的两张图像。alpha和beta是两张图像的权重系数,可以控制图像之间的透明度。gamma是一个亮度调整参数,它可以控制配合之后的图片的亮度。 下面以一个简单的例子来演示如何使用cv2.addWeighted方法实现图像叠加: 1.导入需要的库 import cv2 import numpy as np 2.加载需要合成的两张图片 img1 = cv2.imread('img1.png') img2 = cv2.imread('img2.png') 3.设置权重系数和亮度调整参数 alpha = 0.5 beta = 0.5 gamma = 0 4.使用cv2.addWeighted方法实现图片叠加 dst = cv2.addWeighted(img1, alpha, img2, beta, gamma) 5.显示合成之后的图片 cv2.imshow('dst', dst) cv2.waitKey(0) cv2.destroyAllWindows() 通过以上步骤,我们便可以快速实现两张图片叠加。当然,如果需要更复杂的图像合成操作(如多张图片合成、带有透明通道的图片叠加等),我们需要使用更高级的图像处理技术来实现。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DLANDML

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

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

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

打赏作者

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

抵扣说明:

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

余额充值