python-opencv第六期:addWeighted函数详解

这篇具有很好参考价值的文章主要介绍了python-opencv第六期:addWeighted函数详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概要: 众嗦粥汁所周知,在如今计算机视觉(Computer Version short for CV)是人工智能与机器人技术发展的一个重大研究方向,而opencv作为一个专门为计算机视觉编程提供技术与函数支持的第三方库,自然是一个需要重点研究的内容。

            本期所要介绍的函数是opencv库中的函数——addWeighted

            addWeighted函数的主要作用是将两张源图片以一定的权重进行混合,以满足日常生活中我们对于图片混合的需要。就像《超级战队系列》中萝卜(robot--即机器人)的合体一样,混合之后的图片将兼具不同图片的特点,从而可以多方面地满足我们的需求。

python-opencv第六期:addWeighted函数详解

            从字面上看,“addWeighted”这个单词的主体就是两个单词——“add”和“weight”,用中文翻译一下就是“混合”与“权重”,加起来就是混合两张图片的权重,合成新图片的意思;从效果上来看,addWeighted函数可以使得在图片处理过程中得到类似于PS(Play StationPhotoShop)中图层叠加,附加图层透明化的效果,能够满足我们在图片处理过程中的通常性需要。

           本期为了展示addWeighted函数的图片混合效果要请出的是DC漫画中的超人与蝙蝠侠,在电影《蝙蝠侠大战超人:正义黎明》当中这两位超级英雄曾经大打出手,但作为正义联盟中的队友,最后还是要互相和解,以应对更大的外部威胁。而我们这期博客的展示部分也正是要通过超人的大“S”标志与蝙蝠侠的蝙蝠标志的融合来,展示这两位对于DC漫画具有代表性意义的超英的战斗历程。

            话不多说,我是Kamen Black君,马上开始今天的学习,我已经等不及力

python-opencv第六期:addWeighted函数详解python-opencv第六期:addWeighted函数详解

 正文部分:

python-opencv第六期:addWeighted函数详解

print("祝大家每天快乐,love and peace!")

①使用准备:

与前几期一样,依旧是调用我们的工具人老伙伴----opencv,作为我们使用rectangle的大前提。

import cv2

②适用情况: 

addWeighted函数适用于在图片处理的过程中,当我们需要将两张不同的图片合成之时。要注意的是addWeighted所实现的图片合成倾向于将两张图片的特征都体现出来,并不是简单的图层叠加。而正因如此,可以根据需要,调整图片的权重,从而突出较为重要的图片内容,并得到令我们,满意的结果。

③语法说明:

使用语法:dst = cv2.addWeighted(src1, alpha, src2, beta, gamma,dst,dtype)

参数说明:首个dst:通过addWeighted函数进行图像处理之后得到的目标图像,数据类型为(array)数组类型;

                  src1、src2:使用addWeighted函数进行处理的两个源图像,数据类型也是(array)数组类型;

                  alpha、beta:两幅源图像在混合过程中的权重,前者为src1源图像的权重,后者为src2源图像的权重,两者的大小并不限制在1以内,只要在不出现报错(可以试试取个12!)的范围内,可以任意取值,数据类型为(double)双精度类型;

                  gamma:在两个源图像混合之后,如果对图像的亮度有所要求,则可以通过对gamma的值进行调整来进行对图片整体亮度的调节,如果数值为正则是提高亮度,如果数值为负则是降低亮度,数据类型为(double)双精度类型;

                  次个dst:与首个dst的说明相同,不再赘述,默认为None;

                  dtype:目标图像的数组深度,即单个像素值的位数,默认为None。

补充说明:1、addWeighted函数的原理可以简单地用下面的公示来表示:

                        dst = src1 * alpha + src2 * beta + gamma。

                 2、 从参数名称我们也可以看出来——alpha、beta、gamma对应于希腊字母中的第一、二、三个字母阿尔法、贝塔以及伽马,就像是一家的三兄弟,虽然名称不同,但是它们所代表的意义是相同的,都是权重。只不过老大和老二都有了女朋友(对应于src1与src2),属于动态权重,都要和对应的目标图像数组相乘后再加入结果;而老三是个光棍,属于静态权重,直接加入结果。

                 3、两个源图像的大小与通道数要相同,不然会出现报错。(什么事都要讲究个门当户对啊!

下面另外附上addWeighted函数相关说明的原生文档,以供参考:

def addWeighted(src1: Mat, alpha, src2: Mat, beta, gamma, dts: Mat = ..., dtype=...) 
from __doc__
    """
    'addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) -> dst  
    . @brief Calculates the weighted sum of two arrays.   

    . The function addWeighted calculates the weighted sum of two arrays as follows:                          
    . \\f[\\texttt{dst} (I)= \\texttt{saturate} ( \\texttt{src1} (I)* \\texttt{alpha} +  \\texttt{src2} (I)* \\texttt{beta} +  \\texttt{gamma} )\\f] 
    . where I is a multi-dimensional index of array elements. In case of multi-channel arrays, each
    . channel is processed independently.   
    . The function can be replaced with a matrix expression:   
    . @code{.cpp}       
    . dst = src1*alpha + src2*beta + gamma;   
    . @endcode   
    . @note Saturation is not applied when the output array has the depth CV_32S. You may even get   
    . result of an incorrect sign in the case of overflow.   
    . @param src1 first input array.   
    . @param alpha weight of the first array elements.  
    . @param src2 second input array of the same size and channel number as src1.               
    . @param beta weight of the second array elements.  
    . @param gamma scalar added to each sum.   
    . @param dst output array that has the same size and number of channels as the input arrays.  
    . @param dtype optional depth of the output array; when both input arrays have the same depth, dtype   
    . can be set to -1, which will be equivalent to src1.depth().   
    . @sa  add, subtract, scaleAdd, Mat::convertTo'
    """
    pass

④实例操作:

下面通过超人标志与蝙蝠侠标志的混合来演示一下addWeighted函数的使用方法(海超人与大洋游侠合为一体超人与蝙蝠侠不打不相识):

1、首先,超人与蝙蝠侠平分秋色(alpha:0.5,beta:0.5,gamma:0):

import cv2

superman = cv2.imread("f:/superman.jpg")
h,w,c = superman.shape
batman = cv2.imread("f:/batman.jpg")
batman = cv2.resize(batman,(w,h))
batman_superman = cv2.addWeighted(superman,0.5,batman,0.5,gamma=0)
cv2.imshow("batman&superman",batman_superman)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("f:/batman&superman1.png",batman_superman)

python-opencv第六期:addWeighted函数详解

2、其后,超人在战斗中更胜一筹(alpha:0.8,beta:0.2,gamma:0):

import cv2

superman = cv2.imread("f:/superman.jpg")
h,w,c = superman.shape
batman = cv2.imread("f:/batman.jpg")
batman = cv2.resize(batman,(w,h))
batman_superman = cv2.addWeighted(superman,0.8,batman,0.2,gamma=0)
cv2.imshow("batman&superman",batman_superman)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("f:/batman&superman2.png",batman_superman)

python-opencv第六期:addWeighted函数详解

3、接着,蝙蝠侠扳回一局(alpha:0.2,beta:0.8,gamma:0):

import cv2

superman = cv2.imread("f:/superman.jpg")
h,w,c = superman.shape
batman = cv2.imread("f:/batman.jpg")
batman = cv2.resize(batman,(w,h))
batman_superman = cv2.addWeighted(superman,0.2,batman,0.8,gamma=0)
cv2.imshow("batman&superman",batman_superman)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("f:/batman&superman3.png",batman_superman)

python-opencv第六期:addWeighted函数详解

4、似乎,只能两败俱伤,前途一片灰暗(alpha:0.5,beta:0.5,gamma:-150):

import cv2

superman = cv2.imread("f:/superman.jpg")
h,w,c = superman.shape
batman = cv2.imread("f:/batman.jpg")
batman = cv2.resize(batman,(w,h))
batman_superman = cv2.addWeighted(superman,0.5,batman,0.5,gamma=-150)
cv2.imshow("batman&superman",batman_superman)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("f:/batman&superman4.png",batman_superman)

python-opencv第六期:addWeighted函数详解

5、最后,出现更大的外部威胁,两人和解,前途一片光明(alpha:0.5,beta:0.5,gamma:90)

import cv2

superman = cv2.imread("f:/superman.jpg")
h,w,c = superman.shape
batman = cv2.imread("f:/batman.jpg")
batman = cv2.resize(batman,(w,h))
batman_superman = cv2.addWeighted(superman,0.5,batman,0.5,gamma=90)
cv2.imshow("batman&superman",batman_superman)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("f:/batman&superman5.png",batman_superman)

python-opencv第六期:addWeighted函数详解

最后经过激烈的战斗,超人与蝙蝠侠经过激烈的战斗,发现世界中黑暗势力的威胁的严重程度要远远大于他们两人之间的矛盾与成见,之后他们加入正义联盟,从此过上了幸福的生活从此开始作为战友共同对抗对世界造成威胁的恶势力。

 结语:本期中我们学习了addWeighted函数,了解到opencv中如何使用addWeighted函数来进行图像的混合,使得我们可以得到更能够符合操作需要的图像,虽然只是简单的操作,但是对于我们在图像处理学习过程中对于处理原理的理解确实是饶有好处的。所谓,不积跬步,无以至千里;不积小流,无以成江海。路都是一个一个脚印实实在在地走出来的,希望看到这里的各位同好都能脚踏实地,翻过一座又一座人生的大山,想看的那片海就会离我们越来越近。

好了以上就是所有的内容,希望大家多多关注,点赞,收藏,这对我有很大的帮助。谢谢大家了!

python-opencv第六期:addWeighted函数详解

好了,这里是Kamen Black君。祝国康家安,大家下次再见喽!!!溜溜球~~ 

python-opencv第六期:addWeighted函数详解  

 文章来源地址https://www.toymoban.com/news/detail-406783.html

 

 

到了这里,关于python-opencv第六期:addWeighted函数详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • python-opencv第一期:imread函数详解

    概要:众 嗦粥之 所周知,在如今计算机视觉( Computer Version short for CV)是人工智能与机器人技术发展的一个重大研究方向,而 opencv 作为一个专门为计算机视觉编程提供技术与函数支持的第三方库,自然是一个需要重点研究的内容。本篇博客将介绍python-opencv库中较为简单的

    2024年02月09日
    浏览(38)
  • python-opencv第三期:cvtColor函数详解

    概要:众 嗦粥之 所周知,在如今计算机视觉( Computer Version  short for CV)是人工智能与机器人技术发展的一个重大研究方向,而 opencv 作为一个专门为计算机视觉编程提供技术与函数支持的第三方库,自然是一个需要重点研究的内容。而本期所要介绍的函数就是opencv库下的函

    2024年02月02日
    浏览(40)
  • python-opencv第二期:imwrite函数详解

    概要:众 嗦粥之 所周知,在如今计算机视觉( Computer Version  short for CV)是人工智能与机器人技术发展的一个重大研究方向,而 opencv 作为一个专门为计算机视觉编程提供技术与函数支持的第三方库,自然是一个需要重点研究的内容。本文就将介绍其中一个较为基础的函数—

    2024年02月02日
    浏览(41)
  • 算法第六期——DFS初入门(深度优先搜索)(Python)

    目录   一、蛮力的技术:搜索 1.1、【暴力法】 1.2、蛮力的基本方法——扫描 二、搜索的基本方法 2.1、BFS:一群老鼠走迷宫 2.2、DFS:一只老鼠走迷宫  2.3、BFS和DFS的异同  三、DFS详解 3.1、DFS访问示例 3.2、 DFS基础: 递归和记忆化搜索 3.2.1 递归——斐波那契数列 3.2.2改进递归

    2024年04月13日
    浏览(52)
  • python-opencv之形态学操作(腐蚀和膨胀)原理详解

    Removing noise. Isolation of individual elements and joining disparate elements in an image. Finding of intensity bumps or holes in an image. 最基本的形态操作是侵蚀和扩张。让我们更详细地了解这些操作。 原理 它会侵蚀前景物体的边界,并从图像中移除小规模的细节,但同时会减少感兴趣区域的大小。

    2024年02月05日
    浏览(54)
  • python-opencv第七期:开运算与闭运算详解(上)

    目录 概要: 正文部分: 概念介绍:  何谓“开”与“闭”: 如何实现开运算与闭运算: 应用场景: 结语: 众 嗦粥汁 所周知,在如今计算机视觉( Computer Version  short for CV)是人工智能与机器人技术发展的一个重大研究方向,而 opencv 作为一个专门为机计算机视觉编程提供

    2024年02月04日
    浏览(35)
  • 《Python高并发与高性能编程:原理与实践》——小解送书第六期

    目录 书籍介绍  抽奖 Python成为时下技术革新的弄潮儿,全民Python的发展趋势让人们不再满足于简单地运行Python程序,逐步探索其更为广泛的日常应用和高性能设计。以ChatGPT为代表的大模型产品对初级程序开发人员提出了挑战,要想在开发领域站稳脚跟、有发展,必须掌握更

    2024年02月14日
    浏览(52)
  • python-opencv

    python_opencv安装使用笔记 链接: OpenCV——基于Python开发的OpenCV安装教程 链接: Python使用pip安装库时WARNING: You are using pip version 21.3.1; however, version 22.3.1 is available.的解决办法 链接: Opencv中的图像相加,相减,相除,相乘(python实现) 链接: opencv-python识别魔方特定颜色方块,并输

    2024年02月01日
    浏览(48)
  • 搜索与图论第六期 最短路问题

    Dijkstra算法是一种著名的图算法,主要用于求解有权图中的单源最短路径问题。它由荷兰计算机科学家艾兹赫尔·戴克斯特拉(Edsger Wybe Dijkstra)在1956年首次提出。Dijkstra算法的核心思想是通过以下步骤逐步构建最短路径树: 初始化:创建一个空白的最短路径字典,其中每

    2024年02月20日
    浏览(42)
  • python-opencv划痕检测

    这次实验,我们将对如下图片进行划痕检测,其实这个比较有难度,因为清晰度太差了。 我们做法如下: (1)读取图像为灰度图像,进行自适应直方图均衡化处理,增强图片对比度 (2)然后进行三次图像去噪 - 高斯滤波 (3)然后我们再进行一次直方图均衡操作增强图片

    2024年02月03日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包