首頁 > 軟體

使用Python实现影象融合及加法运算

2022-05-13 21:11:50

一.影象加法运算

1.Numpy库加法

其运算方法是:目标影象 = 影象1 + 影象2,运算结果进行取模运算。

  • 当画素值<=255时,结果为“影象1+影象2”,例如:120+48=168
  • 当画素值>255时,结果为对255取模的结果,例如:(255+64)%255=64

2.OpenCV加法运算

另一种方法是直接呼叫OpenCV库实现影象加法运算,方法如下:

目标影象 = cv2.add(影象1, 影象2)

此时结果是饱和运算,即:

  • 当画素值<=255时,结果为“影象1+影象2”,例如:120+48=168
  • 当画素值>255时,结果为255,例如:(255+64) = 255

两种方法对应的程式码如下所示:

#encoding:utf-8
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图片
img = cv2.imread('picture.bmp')
test = img
#方法一:Numpy加法运算
result1 = img + test
#方法二:OpenCV加法运算
result2 = cv2.add(img, test)
#显示影象
cv2.imshow("original", img)
cv2.imshow("result1", result1)
cv2.imshow("result2", result2)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示,其中result1为第一种方法,result2为第二种方法,白色点255更多。

注意:参与运算的影象大小和型别必须一致。下面是对彩色影象进行加法运算的结果。

二.影象融合

影象融合通常是指将2张或2张以上的影象资讯融合到1张影象上,融合的影象含有更多的资讯,能够更方便人们观察或计算机处理。如下图所示,将两张不清晰的影象融合得到更清晰的图。

影象融合是在影象加法的基础上增加了系数和亮度调节量。

  • 影象加法:目标影象 = 影象1 + 影象2
  • 影象融合:目标影象 = 影象1 * 系数1 + 影象2 * 系数2 + 亮度调节量

主要呼叫的函数是addWeighted,方法如下:

dst = cv2.addWeighter(scr1, alpha, src2, beta, gamma)
dst = src1 * alpha + src2 * beta + gamma

其中引数gamma不能省略。

程式码如下:

#encoding:utf-8
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图片
src1 = cv2.imread('test22.jpg')
src2 = cv2.imread('picture.bmp')
#影象融合
result = cv2.addWeighted(src1, 1, src2, 1, 0)
#显示影象
cv2.imshow("src1", src1)
cv2.imshow("src2", src2)
cv2.imshow("result", result)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

需要注意的是,两张融合的影象画素大小需要一致,如下图所示,将两张RGB且画素410*410的影象融合。

设定不同的比例的融合如下所示:

result = cv2.addWeighted(src1, 0.6, src2, 0.8, 10)

三.影象型别转换

影象型别转换是指将一种型别转换为另一种型别,比如彩色影象转换为灰度影象、BGR影象转换为RGB影象。OPenCV提供了200多种不同型别之间的转换,其中最常用的包括3类,如下:

  • cv2.COLOR_BGR2GRAY
  • cv2.COLOR_BGR2RGB
  • cv2.COLOR_GRAY2BGR

程式码如下所示:

#encoding:utf-8
import cv2
import numpy as np
import matplotlib.pyplot as plt

#读取图片
src = cv2.imread('01.bmp')

#影象型别转换
result = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

#显示影象
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示:

如果使用通道转化,则结果如下图所示:

result = cv2.cvtColor(src, cv2.COLOR_BGR2RGB)

影象处理通常需要将彩色影象转换为灰度影象再进行后续的操作,更多知识后续将继续分享,希望对着喜欢,尤其是做影象识别、影象处理的同学。

到此这篇关于使用Python实现影象融合及加法运算的文章就介绍到这了,更多相关Python影象融合内容请搜寻it145.com以前的文章或继续浏览下面的相关文章希望大家以后多多支援it145.com!


IT145.com E-mail:sddin#qq.com