【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解

这篇具有很好参考价值的文章主要介绍了【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解

1. 介绍

在OpenCV图像加法cv2.add函数详解详细介绍了图像的加法运算。

除了这种加法外,OpenCV还提供了带权重的加法,即两副图像的像素通道值相加时各自按一定的权重比例取值来相加。

假设有2个图像矩阵src1和src2,在两个图像融合时,各自的权重分别为alpha和beta,则二者融合后的目标图像dst中各像素通道值的计算公式为:

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

上述公式中两副图像的权重alpha和beta取值没有强制要求,但一般情况建议alpha+beta=1。实际上alpha、beta和src1、src2相乘就是调整的src1、src2对应图像的明暗度,因此图像融合权重加法实际上是先各自调整两副图像的明暗度之后再相加。

2. API

import cv2
out = cv2.addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=None)
  • 参数说明:
    • src1, src2:需要融合相加的两副大小和通道数相等的图像
    • alpha:src1的权重
    • beta:src2的权重
    • gamma:gamma修正系数,不需要修正设置为0,具体请参考《图像处理gamma修正(伽马γ校正)的原理和实现算法》
    • dst:可选参数,输出结果保存的变量,默认值为None,如果为非None,输出图像保存到dst对应实参中,其大小和通道数与输入图像相同,图像的深度(即图像像素的位数)由dtype参数或输入图像确认
    • dtype:可选参数,输出图像数组的深度,即图像单个像素值的位数(如RGB用三个字节表示,则为24位),选默认值None表示与源图像保持一致。
  • 返回值:
    • out:融合相加的结果图像

3. 代码示例与效果

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("img2's size must less than or equal to img1")
        raise ValueError(f"img2's size {smallImg.shape[1::-1]} must less than or equal to img1's size {largeImg.shape[1::-1]}")
    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

该函数的前5个参数与addWeighted对应,但多了个regionTopLeftPos参数,用于指定小图像左上角放置到大图像的具体位置,缺省为大图像的左上角。

下面使用addWeightedSmallImgToLargeImg来实现一个两副图像融合的案例。

  • 案例中使用的大图像如下:大小(550,620)
    【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解,Opencv,# Python,使用说明,opencv,python,计算机视觉

  • 案例中使用的小图像如下:大小(300,400)
    【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解,Opencv,# Python,使用说明,opencv,python,计算机视觉

3.1 代码

import numpy as np
import cv2

img1 = cv2.imread(r'a.jpg')
img2 = cv2.imread(r'b.jpg')
img = addWeightedSmallImgToLargeImg(img1, 1, img2, 0.6,regionTopLeftPos=(100, 100))
cv2.imwrite('result.jpg', img)

3.2 效果

【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解,Opencv,# Python,使用说明,opencv,python,计算机视觉

4. 参考

【1】https://blog.csdn.net/LaoYuanPython/article/details/109143281文章来源地址https://www.toymoban.com/news/detail-605915.html

到了这里,关于【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于opencv中cv2.imread函数读取的图像shape问题

    图像坐标系是(w,h),w为x轴,h为y轴,(x,y) 但opencv读出来的数组却正好相反,是(h,w,3),(y,x,3) 所以这里会有一个转换 实则转换为图像坐标系时,要转置一下,或者image.shape[::-1] 切片操作 [start,endstep],其中:- start: 表示开始的下标,如果省略默认为 0 - end: 表示结束的下标(不包含

    2024年02月12日
    浏览(33)
  • 【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印

    在OpenCV中,调用cv2.putText()函数可添加文字到指定位置,对于需要在图片中加入文字的场景提供了一种比较直接方便的方式。 注意:OpenCV 不支持显示中文字符,使用 cv2.putText() 时添加的文本字符串不能包含中文字符(包括中文标点符号) 其函数原型如下所示: 上述参数分别

    2024年02月04日
    浏览(39)
  • opencv 基础50-图像轮廓学习03-Hu矩函数介绍及示例-cv2.HuMoments()

    Hu 矩(Hu Moments)是由计算机视觉领域的科学家Ming-Kuei Hu于1962年提出的一种图像特征描述方法。这些矩是用于描述图像形状和几何特征的不变特征,具有平移、旋转和尺度不变性,适用于图像识别、匹配和形状分析等任务。 Ming-Kuei Hu在其论文中提出了七个用于形状描述的独特

    2024年02月13日
    浏览(41)
  • opencv-python[cv2]读取中文路径图像

    随着AI人工智能的不断发展,图像处理这门技术也越来越重要,很多学校本科都开启了图像处理这门课程,学习图像处理开发,自然就绕不开opencv-python[ cv2 ]这个由intel主导的开源库。 cv2 是指OpenCV的Python接口库。 OpenCV (Open Source Computer Vision Library)是一个开源的计算机视觉库

    2024年02月06日
    浏览(45)
  • Python OpenCV 图像缩放:使用 cv2.resize() 方法

    图像缩放是计算机视觉和图像处理中常用的操作之一。OpenCV 是一个强大的计算机视觉库,提供了许多图像处理功能。在 Python 中使用 OpenCV 进行图像缩放非常简单,可以使用 cv2.resize() 方法来实现。 cv2.resize() 方法可以根据指定的尺寸调整图像的大小。它可以缩小图像,也可以

    2024年02月02日
    浏览(37)
  • opencv-python3 | cv2.findContours()检测图像中物体轮廓

    轮廓可以简单地理解为连接所有连续点(沿物体边界)的曲线,这些点通常具有相同的颜色或强度。 轮廓在图像分析中具有重要意义,是物体形状分析和对象检测和识别的有用工具,是理解图像语义信息的重要依据。 通常,为了提高物体轮廓检测的准确率,首先要将彩色图

    2024年02月05日
    浏览(32)
  • 解决python3安装完OpenCV后没有cv2.imshow、cv2.imread等函数的问题

    发现cv2中没有函数可用,此时打开cv2所在的文件夹, 找到 cv2.pyd 文件,复制到所用python环境中的site-packages文件夹中 关闭项目工程文件重新打开,就可以调用cv2中的函数了。

    2024年02月03日
    浏览(57)
  • opencv图像旋转和翻转,cv2.flip,cv2.rotate

    目录 翻转图像 图像旋转         opencv中使用cv2.filp可以实现图像翻转 src:输入图像 flipCode:flipCode 一个标志来指定如何翻转数组;0表示上下翻转,正数表示左右翻转,负数表示上下左右都翻转。 dst:输出图像         下面代码对图像进行不同旋转。         opencv中使

    2024年02月15日
    浏览(32)
  • Python中使用OpenCV读取灰度图像时遇到的错误:module ‘cv2‘ has no attribute ‘CV_LOAD_IMAGE_GRAYSCA...

    Python中使用OpenCV读取灰度图像时遇到的错误:module ‘cv2’ has no attribute ‘CV_LOAD_IMAGE_GRAYSCALE’。 OpenCV是一款广泛应用于计算机视觉领域的开源计算机视觉库,它可以实现图像处理、分析、识别等功能。而在使用OpenCV读取灰度图像时,可能会出现上述错误。 这个错误发生的原

    2024年02月16日
    浏览(39)
  • 【Python】【Opencv】形态学操作cv2.morphologyEx()函数详解和示例,实现腐蚀、膨胀、闭和开等运算

    常用的形态学操作如腐蚀、膨胀、开运算、闭运算等,可以帮助我们解决一下图像不连接或消除图像中某些不想要的连接,对于图像处理使用方便,效果明显。本文通过示例对这些功能和效果进行演示,以帮助大家理解和使用。 cv2.morphologyEx 是 OpenCV 中的一个函数,用于执行

    2024年02月22日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包