opencv图像处理基础操作之图像的加法和混合

时间:2022-03-09 01:02:57

概述

图像的加法和混合都是将两张相同大小的图像结合生成一张新的图像的方法,但是他们的计算方式和生成图像的效果都不同。

图像的加法就是简单的将两张图像的像素值相加,生成一个新的图像。如果两张图像的尺寸不同的话,就要做预处理,将他们裁剪或者缩放,使他们的尺寸一致。图像相加的时候,如果像素值大于了255,则取255,也就是说,任何颜色和白色相加都是白色。

图像的混合指的是将两张图像按照一定的权重进行相加,生成一张新的图像。本质上还是图像的加法,只不过,每个像素值相加的时候,会给一个权重。两张图片的权重之和应该要等于1。这样就不会出现任何图片加白色图片等于白色的情况。比如两张图片中某个点的像素值 一个为 300 一个为200 图片1的权重为0.2 图片2的权重为0.8 则,最后的像素值为 300*0.2 + 200 * 0.8 = 220。如果是用图像的加法的话,就是300+200 = 500 > 255 = 255 最终像素点变成了白色。

应用场景

图像融合:比如图像修复、图像拼接、HDR合成等

图像增强:比如图像去噪、图像增强、图像锐化等

物体检测:比如将检测结果与原始图像叠加

例程

import cv2 as cv

# 图像的相加
def img_add():
img1 = cv.imread("1.jpg")
img2 = cv.imread("2.jpg")

# 图片相加
res = cv.add(img1, img2)

cv.imshow("img1", img1)
cv.imshow("add", res)
cv.waitKey(0)
cv.destroyAllWindows()

# 图像的混合
def img_add_weight():
img1 = cv.imread("1.jpg")
img2 = cv.imread("2.jpg")

# 设置权重
alpha = 0.2

# 混合图片
res = cv.addWeighted(img1, alpha, img2, 1-alpha, 0)

cv.imshow("img1", img1)
cv.imshow("img2", img2)
cv.imshow("res", res)

cv.waitKey(0)
cv.destroyAllWindows()

if __name__ == '__main__':
print_hi('PyCharm')
img_add()
img_add_weight()

这是 1.jpg

opencv图像处理基础操作之图像的加法和混合

这是 2.jpg

opencv图像处理基础操作之图像的加法和混合

这是图像相加的结果

opencv图像处理基础操作之图像的加法和混合

这是图像混合的结果

opencv图像处理基础操作之图像的加法和混合

从上面可以明显的看出相加和混合的差异。直接相加会损失部分图像,而混合能更好保留两张图像的特征。在不同的场景下使用不同的方法可以达到很好的效果