共同学习Opencv的小伙伴们,大家好。今天是我们学习Opencv的第四天了,之前几篇博客从最基本的像素介绍到图像的感兴趣区,今天来看看我为大家带来什么吧!
说到Opencv里面对图像进行加法运算,那就要分两种加法运算,分别是通过numpy包来进行加法运算,和直接Opencv加法运算,在我们了解语法之前,还是来看看图像的加法运算在opencv里面是如何实现的。
1.加法运算的概念
这里我们以八位图像来举例说明,首先八位图像在计算机中是以二进制来存放,最小值是0000 0000对应十进制中的0,而最大值是1111 1111对应十进制中的255,一共256中灰度集。
2.利用numpy包进行加法运算(取余运算)
在使用numpy包进行加法运算时,我们用到的语法如下:
结果=图像1+图像2
在这里,两个图像的像素点的相加得到的数字<=255时,那么我们的结果就等于这个数字
如果两个图像的像素点的相加得到的数字>255时,那么我们的结果要对这个数字进行对255的取余运算。
例如,两个像素分别为100和58,那么100+58=158<255,则结果就等于158;
如果两个像素分别为255和58,那么255+58=(255+58)%255=58,则结果就是58。
3.利用opencv进行加法运算(饱和运算)
在opencv中进行加法运算时,我们需要调用add()函数,其语法如下:
结果=cv2.add(图像1,图像2)
这时,结果也分两种情况
如果和的数值<=255,那么结果为该数值;
如果和的数值>255,那么结果只能为255。
在这里,我们称为饱和运算,即不管加起来的数值等于多少,他最大只能是255。
(普及一下,opencv中0代表黑色,255代表白色,越靠近0则黑色的程度越深,越靠近255,则白色的程度越深。)
注意!!!参与运算的图像大小,类型必须保持一致!!!
3.代码实现
接下来我们通过代码来演示一下图像的加法运算。
>>> import cv2
>>> import numpy as np
>>> img=cv2.imread(r"C:\Users\LT010407\Desktop\2.jpg")
>>> pic=img
>>> cv2.imshow("img",img)
>>> i=pic+img
>>> cv2.imshow("i",i)
>>> k=cv2.add(img,pic)
>>> cv2.imshow("k",k)
>>>
这里我们i是用numpy包进行的运算,k是在opencv里面运用了add()函数进行的运算,来看看结果!
1.图像融合的概念
首先来介绍一下图像融合的概念,指的是将2张或2张以上的图像信息融合到1张图像上,这里小伙伴们就疑惑了,这个和图像相加不就是一样的吗,其实不同,融合的图像含有更多的信息,能够更方便人来观察或者计算机处理。
如图,用两个白色框框起来的两幅图像区域都是有部分不清晰,但是通过图像融合,我们能够得到一幅清晰的图像,这就是图像的融合。
2.图像融合的语法
这里我只介绍了将两幅图像以不同权重的方式给加在一起,我们需要调用addWeighted()函数,来看语法:
dst=cv2.addWeighted(src1,alpha,src2,beta,gamma)
而dst=src1alpha+src2beta+gamma,如果用中文表示就是:
结果图像=图像1系数1+图像2系数2+亮度调节量
这里系数指的是图像的透明度,如果系数越大,则该图像占比的透明度越大,显示在结果图像上时,该图像就越深,而亮度调节量就是用来调节结果图像的亮度,值越大就越亮,最小是0,即不做改变,但是参数gamma(亮度调节量)不能省略。
3.代码和结果
刚刚介绍了图像融合的语法,老规矩,上代码和结果:
impore cv2
a=cv2.imread(r"C:\Users\LT010407\Desktop\3.jpg")
b=a=cv2.imread(r"C:\Users\LT010407\Desktop\3.jpg")
result=cv2.addWeighted(a,0.6,b,0.3,0)
cv2.imshow("result",result)
在这里我们可以看见,这个lena图像因为我调的是0.3,所有就更淡一点,而那个boat图像我调到0.6,所有就更重一点,亮度调节是0。
好的,今天的内容就讲到这里了吧,下一篇博客见。