图像类型转换是指将一种图像转化成另一种类型,比如将彩色图像转换成灰度图像,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)
输出结果如下所示:
使用通道转化
result = cv2.cvtColor(src, cv2.COLOR_BGR2RGB)
在进行图像处理工作中,经常需要将彩色图象转换成灰度图像,改变图像通道只是图像类型转换中的一种方法,还有其他方法,本文方法只是其中一种较为简单的方法,仅供参考~
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为第二种方法。
图像融合是用特定的算法将两幅或多幅图像综合成一幅新的图像。融合结果由于能利用两幅(或多幅) 图像在时空上的相关性及信息上的互补性,并使得融合后得到的图像对场景有更全面、清晰的描述,从而更有利于人眼的识别和机器的自动探测。融合的图像像素大小需要一致。
主要调用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)
image2图像像素大小为(422,470)
融合后的图像
在进行图像融合时,将image2的像素大写resize成余image1相大小的像素,对图像进行缩放,然后进行融合。
缩放核心代码如下:
result1 = cv2.resize(image2,(cols,rows),interpolation=cv2.INTER_LINEAR)
图像resize这块请参考:https://www.cnblogs.com/lfri/p/10596530.html