引言
此系列博客记录 网易云课堂 python + openCV图像处理课程的学习过程。
本篇文章将介绍 图像运算、图像融合、图像类型转换、图像缩放 四个部分。
示例图片
color.jpg
xiaoxin.png
monkey.png
代码
1、图像运算
原理:
其中,numpy加法 为 取模加法。
openCV加法 为 饱和运算。
注意:参与运算的图像大小、类型必须一致
import cv2
import numpy as np
a = cv2.imread(r"C:\workspace\python\openCV\color.jpg",cv2.IMREAD_UNCHANGED) # BGR图像,三通道
b = a
result1 = a + b # numpy加法
result2 = cv2.add(a,b) # openCV加法
cv2.imshow("original",a) # 原图
cv2.imshow("result1",result1)
cv2.imshow("result2",result2)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果图:
可以看到,取模运算(numpy)图片保留的细节比较丰富,而饱和运算(openCV)图片细节丢失,亮度很高。
2、图像融合
import cv2
a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)
b = cv2.imread(r"C:\workspace\python\openCV\monkey.png",cv2.IMREAD_UNCHANGED)
result = cv2.addWeighted(a,0.3,b,0.6,0) # 务必注意:a 和 b 形状必须相同,例如:都是 50*50 像素
cv2.imshow("xiaoxin",a)
cv2.imshow("monkey",b)
cv2.imshow("mix",result)
cv2.waitKey()
cv2.destroyAllWindows()
addWeighted(a,x1,b,x2,light)
- 将 a和b 两个图像分别按照x1,x2比重叠加在一起,light表示亮度
效果图:
请叫他 monkey 新!!!!
3、图像类型转换
import cv2
a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)
b = cv2.cvtColor(a,cv2.COLOR_BGR2GRAY) # 转换为 灰度图像
cv2.imshow("xiaoxin",a)
cv2.imshow("sadxin",b)
cv2.waitKey(0)
cv2.destroyAllWindows()
# cv2.imwrite(r"C:\workspace\python\openCV\sadxin.png",b) #保存悲伤的小新
cv2.COLOR_BGR2GRAY
- BGR TO GRAYcv2.COLOR_BGR2RGB
- BGR TO RGBcv2.COLOR_GRAY2BGR
- GRAY TO BGR
另外,openCV里还提供了200多种不同类型之间的转换。
tips
:将 灰度 转化为 BGR图像,看起来两个都是灰色的,但是调用shape会发现,BGR是三通道。
4、图像缩放
import cv2
a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)
rows,cols,chn = a.shape
# b = cv2.resize(a,(200,100)) # 1、调整 a图像 的大小为 200 * 100
b = cv2.resize(a,(round(rows * 0.5),round(cols * 1.5))) # 2、调整 a图像 的列宽为原来的0.5被,行宽为原来的1.5倍
# b = cv2.resize(a,None,fx=0.5,fy=1.5) # 3、调整 a图像 的列宽为原来的1倍,行宽为原来的0.3倍
cv2.imshow("a",a)
cv2.imshow("b",b)
cv2.waitKey(0)
cv2.destroyAllWindows()
b = cv2.resize(i,dsize,fx,fy)
- 有4个参数(前2个必须有),i 表示目标图片,dsize 表示具体的长和宽,fx 表示长的比例,fy 表示宽的比例
效果图: