Python图像融合

                                       Python图像融合

目标
图像加法、减法、位运算
学习函数cv2.add(),cv2.addWeighted()

加法:
使用cv2.add()将两个图像相加,可以使用numpy中的矩阵加法来实现。但是在opencv中加法是饱和操作,也就是有上限值,numpy会对结果取模。

# 图像上的加法
# 大致有两种:
#       cv2.add():这是一个饱和操作
#       +:这是Numpy中的运算,之一种模操作,res = img1 + img2
# 注意两幅图片的大小类型必须一致,或者第二个图象是一个标量
# 由于两者的差别,我们一般多用cv2.add(src1, src2)

img1=cv2.imread('1.jpg')
img2=cv2.imread('2.jpg')
 
res = cv2.add(img1,img2)

原图像
è¿éåå¾çæè¿°è¿éåå¾çæè¿°

加法后的结果

è¿éåå¾çæè¿°

图像混合(融合,可以设置图片的透明度)
实际上也是加法,只不过是按比例混合起来,有不同的权重 ,给人一种混合的或者透明的感觉
公式如下
g (x) = (1 − α)f0 (x) + αf1 (x)   #a→(0,1)不同的a值可以实现不同的效果

现在第一幅图像的权重是0.7,第二幅图像的权重是0.3,使用cv2.addWeighted()函数进行混合
 

img1=cv2.imread('1.jpg')
img2=cv2.imread('2.jpg')
 
dst=cv2.addWeighted(img1,0.7,img2,0.3,0)

混合后的结果

è¿éåå¾çæè¿°

按位运算(问题:如何将一个图放到另一个图上去,加法会改变颜色,混加会透明)

位运算操作有and, or, not, xor。在提取部分图像选择非举行区域roi时,位运算操作十分有用。下面例子是改变一副图像的特定区域。
把opencv的标志放到另外一副图像上,如果使用加法,颜色会改变,如果使用混合,会变成透明,但是我们不想要透明效果,如果是举行区域,可以使用roi方法,但是并不是举行,下面使用位运算实现。
 

import cv2
import numpy as np
# 加载图像
img1 = cv2.imread('2.jpg')
img2 = cv2.imread('1.jpg')
 
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
 
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)      # 将图片灰度化
ret, mask = cv2.threshold(img2gray, 175, 255, cv2.THRESH_BINARY)#ret是阈值(175)mask是二值化图像
mask_inv = cv2.bitwise_not(mask)#获取把logo的区域取反 按位运算
 
img1_bg = cv2.bitwise_and(roi,roi,mask = mask)#在img1上面,将logo区域和mask取与使值为0
 
# 取 roi 中与 mask_inv 中不为零的值对应的像素的值,其他值为 0 。
# 把logo放到图片当中
img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)#获取logo的像素信息
 
dst = cv2.add(img1_bg,img2_fg)#相加即可
img1[0:rows, 0:cols ] = dst
cv2.imshow('res',img2_fg)
cv2.waitKey(0)
cv2.destroyAllWindows()

 样例里面的思路比较巧妙,logo的背景都是黑色的,方便提取出来
先将logo设定阈值并二值化,得到logo区域的范围
将在背景图片中要放置logo区域的像素信息用位运算置0
将logo的像素信息和背景图片的像素相加
最后就这这个效果

è¿éåå¾çæè¿°

【转载】:https://blog.csdn.net/qq_41895190/article/details/82905657

                  https://blog.csdn.net/huanglu_thu13/article/details/52346286

附:https://www.cnblogs.com/ssyfj/p/9260798.html(涉及加减乘除各种操作)

Python中,可以使用OpenCV库来进行图像融合图像融合是将两张图像按照一定的权重进行混合,生成一张新的图像。在OpenCV中,主要使用addWeighted()函数来实现图像融合。该函数的原型如下: dst = cv2.addWeighted(img1, alpha, img2, beta, gamma) 其中,img1和img2是两张待融合的图像,alpha和beta是img1和img2对应像素的权重,gamma是一个常数项。需要注意的是,两张融合图像的像素大小必须一致,且参数gamma不能省略。融合后的图像将保存在dst中。 此外,在OpenCV中也可以使用cv2.add()函数将两个图像进行相加。不过需要注意的是,OpenCV中的加法是饱和操作,即结果会受到上限值的限制。相比之下,使用numpy中的矩阵加法会对结果取模。因此,在进行图像融合时,推荐使用addWeighted()函数来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [[Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制](https://blog.csdn.net/Eastmount/article/details/122710392)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Python图像融合](https://blog.csdn.net/u013185349/article/details/85077409)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值