自己写一个类似cv2.addWeighted的函数实现图像融合, 不要用cv2.addWeighted
时间: 2024-01-02 12:47:11 浏览: 73
好的,我可以给你提供一种实现图像融合的方法。
方法如下:
1. 首先,读取两张待融合的图片。
2. 然后,将两张图片进行缩放,使得它们的大小相同。
3. 接着,创建一个新的空白图片,大小和融合后的图片大小相同。
4. 对于新的空白图片中的每个像素,计算其RGB值,方法如下:
1. 对于第一张图片中的像素,计算其RGB值的平均值。
2. 对于第二张图片中的像素,计算其RGB值的平均值。
3. 将两个平均值按照一定的比例进行加权求和,得到新的RGB值。
5. 最后,将计算得到的RGB值填充到新的空白图片中,生成融合后的图片。
下面是实现代码:
```python
import numpy as np
import cv2
# 定义图像融合函数
def my_addWeighted(img1, img2, alpha, beta, gamma):
# 缩放两张图片大小
img1 = cv2.resize(img1, (img2.shape[1], img2.shape[0]))
# 创建新的空白图片
img_blend = np.zeros_like(img1)
# 计算融合后的每个像素的RGB值
for i in range(img1.shape[0]):
for j in range(img1.shape[1]):
b1, g1, r1 = img1[i, j]
b2, g2, r2 = img2[i, j]
b_new = alpha * b1 + beta * b2 + gamma
g_new = alpha * g1 + beta * g2 + gamma
r_new = alpha * r1 + beta * r2 + gamma
img_blend[i, j] = [b_new, g_new, r_new]
return img_blend
# 读取两张待融合的图片
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
# 调用my_addWeighted函数进行图像融合
img_blend = my_addWeighted(img1, img2, 0.5, 0.5, 0)
# 显示融合后的图片
cv2.imshow('img_blend', img_blend)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,我们使用了一个双重循环来遍历融合后的每个像素,并计算其RGB值。这种方法虽然比较慢,但实现起来比较简单,容易理解。如果你需要更快的图像融合方法,可以使用numpy的矩阵运算来实现。
阅读全文