博客
关于我
OpenCV-Python图像融合cv2.addWeighted权重加法函数详解
阅读量:92 次
发布时间:2019-02-26

本文共 2244 字,大约阅读时间需要 7 分钟。

图像融合之 OpenCV 权重加法

☞ ░ ░

一、概述

在 OpenCV 中,图像加法运算不仅支持简单的像素相加,还提供了带权重的加法功能。这种方法允许开发者根据需求调整两副图像在融合时的权重比例,从而实现更灵活的图像合成效果。

假设有两个图像矩阵 src1 和 src2,它们的像素通道值相加时分别乘以权重 alpha 和 beta。融合后的目标图像 dst 中像素通道值的计算公式为:

dst(I) = saturate(src1(I) * alpha + src2(I) * beta + gamma)

其中,alpha 和 beta 是权重系数,gamma 是调节系数。权重系数 alpha 和 beta 的取值范围没有严格限制,但在实际应用中建议 alpha + beta = 1。这种设置使得每副图像的明暗度可以独立调整,从而实现更精细的图像融合效果。

如果对上述公式或权重系数的使用有疑问,可以参考相关文档获取更详细的解释。

二、融合 cv2.addWeighted 权重加法函数语法

调用语法:
addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=None)
参数说明:
  • src1 和 src2:需要融合相加的两副大小和通道数相等的图像。
  • alpha:src1 的权重系数。
  • beta:src2 的权重系数。
  • gamma:调节系数,不需要修正时设置为 0,具体参数请参考相关文档。
  • dst:可选参数,用于存储融合后图像的输出结果,默认值为 None。如果提供非 None 的值,输出图像将存储到 dst 对应位置。
  • dtype:可选参数,指定输出图像数组的深度(即像素位数)。默认值为 None,与输入图像保持一致。
  • 返回值:融合相加后的结果图像数组。

三、案例

在实际应用中,addWeighted 函数只能处理大小和通道数相同的两副图像。如果需要将小图像与大图像融合,可以通过自定义函数实现。以下是一个实现小图像与大图像融合的示例函数:

def addWeightedSmallImgToLargeImg(largeImg, alpha, smallImg, beta, gamma=0.0, regionTopLeftPos=(0,0)):      srcW, srcH = largeImg.shape[1::-1]      refW, refH = smallImg.shape[1::-1]      x, y = regionTopLeftPos      if (refW > srcW) or (refH > srcH):          raise ValueError("小图像的尺寸必须小于等于大图像的尺寸")      else:          if (x + refW) > srcW:              x = srcW - refW          if (y + refH) > srcH:              y = srcH - refH          destImg = np.array(largeImg)          tmpSrcImg = destImg[y:y+refH, x:x+refW]          tmpImg = cv2.addWeighted(tmpSrcImg, alpha, smallImg, beta, gamma)          destImg[y:y+refH, x:x+refW] = tmpImg          return destImg

该函数的参数与 addWeighted 函数一致,但增加了 regionTopLeftPos 参数,用于指定小图像在大图像中的左上角位置,默认值为 (0,0),即大图像的左上角。

以下是一个使用 addWeightedSmallImgToLargeImg 函数实现图像融合的案例:

import numpy as np  import cv2  def main(): img1 = cv2.imread(r'F:\pic\seaside.jpg') img2 = cv2.imread(r'F:\pic\beauty.jpg') img = addWeightedSmallImgToLargeImg(img1, 1, img2, 0.1, regionTopLeftPos=(300,300)) cv2.imshow('融合图像', img) cv2.waitKey(0) if name == 'main': main()

运行该代码会生成一个融合后的图像,图片中小图像的权重为 1,大图像的权重为 0.1,融合后的图像显示了两副图像的结合效果。

四、小结

本文详细介绍了 OpenCV-Python 中相同大小和通道数的两副图像融合的 cv2.addWeighted 权重加法函数的语法,并在此基础上实现了一个小图像与大图像融合的函数 addWeightedSmallImgToLargeImg。通过该函数,可以实现更加灵活的图像融合效果。

需要注意的是,权重系数 alpha 和 beta 是相互独立的变量,主要用于调整两副图像的明暗度比例。在实际应用中,建议 alpha + beta = 1,以确保图像融合效果的准确性。

转载地址:http://hktk.baihongyu.com/

你可能感兴趣的文章
python 到大数据开发工程师_如何成为一个大数据开发工程师?
查看>>
python 加密解密(base64, AES)
查看>>
Python 包管理器和 Node.js
查看>>
Python 单词字母顺序不变且所有倒排
查看>>
python 反射机制
查看>>
python 启动提示IDLE's subprocess didn't make conne...
查看>>
python 命令接口_实现“[命令][操作][参数]”样式的命令行接口?
查看>>
Python 和 OpenCV.如何检测图像中的所有(填充)圆形/圆形对象?
查看>>
Python 和 RabbitMQ - 聆听来自多个渠道的消费事件的最佳方式?
查看>>
python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
查看>>
python编译exe同时支持32位_第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe...
查看>>
Python 和Java 哪个更适合做自动化测试?
查看>>
Python编程:掌握高级语言程序设计。从零基础到精通,收藏这篇就够了!
查看>>
python 图片转ico
查看>>
python 图片转文字、语音转文字、文字转语音保存音频并朗读
查看>>
python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
查看>>
Python 在并行进程之间共享字典
查看>>
Python 垃圾收集器文档
查看>>
python 基于 wordcloud + jieba + matplotlib 生成词云
查看>>
python 基于detectron或mask_rcnn的mask遮罩区域进行图片截取
查看>>