Python图像处理(五)——图像类型转换、加法运算及图像融合

一、图像类型转换

图像类型转换是指将一种图像转化成另一种类型,比如将彩色图像转换成灰度图像,BGR格式图像转换成RGB格式图像,一下列出OpenCV中常用的三种图像类型转化。

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

代码如下所示:

import cv2

#读取图片
image = cv2.imread("E:/pythonProject/mei.jpeg")

#彩色图像转换为灰度图像
meig = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#图片显示
cv2.imshow("g",meig)
cv2.imshow("m",image)

#窗口等待
cv2.waitKey(0)
cv2.destroyAllWindows()

#图片写入
cv2.imwrite("E:/pythonProject/meig.jpeg",meig)

输出结果如下所示:

Python图像处理(五)——图像类型转换、加法运算及图像融合_第1张图片

使用通道转化

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

Python图像处理(五)——图像类型转换、加法运算及图像融合_第2张图片

在进行图像处理工作中,经常需要将彩色图象转换成灰度图像,改变图像通道只是图像类型转换中的一种方法,还有其他方法,本文方法只是其中一种较为简单的方法,仅供参考~

二、图像加法运算

1.Numpy库加法

取模加法

其运算法则:目标图像 = 图像1 + 图像2,运算结果进行取模计算

1. 当像素值<= 255时,结果为“图像1 + 图像2”,例如128 + 26 = 154

2. 当像素值>= 255时,结果为对255去模的结果,例如:(255+64)% 255 = 64

2.OpenCV 加法运算

直接调用OpenCV库,饱和运算

1. 当像素值<= 255时,结果为“图像1 + 图像2”,例如128 + 26 = 154

2. 当像素值>= 255时,结果为255,例如:(255+64)= 255

import cv2
import matplotlib.pyplot as plt

# #读取图片
image = cv2.imread("E:/pythonProject/mei.jpeg")
g = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
a = g

#方法一numpy图片相加
result1 = g + a

#方法二OpenCV图片相加
result2 = cv2.add(g,a)
images = [g,result1,result2]
titles = ["image","result1","result2"]

#图象显示
for i in range(3):
    plt.subplot(1,3,i+1)
    plt.imshow(images[i]),plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
plt.show()

结果如下图所示,其中result1为第一种方法,result2为第二种方法。

Python图像处理(五)——图像类型转换、加法运算及图像融合_第3张图片

三、图像融合

图像融合是用特定的算法将两幅或多幅图像综合成一幅新的图像。融合结果由于能利用两幅(或多幅) 图像在时空上的相关性及信息上的互补性,并使得融合后得到的图像对场景有更全面、清晰的描述,从而更有利于人眼的识别和机器的自动探测。融合的图像像素大小需要一致。

主要调用addWeighted函数

dst = cv2.addWeighter(scr1, alpha, src2, beta, gamma)
dst = src1 * alpha + src2 * beta + gamma
其中参数gamma不能省略。

代码如下:

import cv2

#读取图片
image1 = cv2.imread("E:/pythonProject/mei.jpeg")
image2 = cv2.imread("E:/pythonProject/xin.jpeg")

#获取图像的宽度核高度
rows, cols = image1.shape[:2]
#print(image1.shape[:2]) 
#print(image2.shape[:2])

#缩放图像
result1 = cv2.resize(image2,(cols,rows),interpolation=cv2.INTER_LINEAR)
#print(result1.shape)

#图像融合
result2 = cv2.addWeighted(image1,0.6,result1,0.4,0)

#图像显示
cv2.imshow("demo",result2)
cv2.waitKey(0)
cv2.destroyAllWindows()

image1图像像素大小为(640,1024)

Python图像处理(五)——图像类型转换、加法运算及图像融合_第4张图片

image2图像像素大小为(422,470)

Python图像处理(五)——图像类型转换、加法运算及图像融合_第5张图片

融合后的图像

Python图像处理(五)——图像类型转换、加法运算及图像融合_第6张图片

在进行图像融合时,将image2的像素大写resize成余image1相大小的像素,对图像进行缩放,然后进行融合。

缩放核心代码如下:

result1 = cv2.resize(image2,(cols,rows),interpolation=cv2.INTER_LINEAR)

图像resize这块请参考:https://www.cnblogs.com/lfri/p/10596530.html

 

 

 

 

 

 

你可能感兴趣的:(opencv,python)