OpenCV学习笔记(2)——图像运算
- 蒙面西红柿
- 1,114
一:图像基本运算
1.图像加法(参与运算的图像大小,类型必须一致)
Numpy
result = img1 + img2
OpenCV
result = cv2.add(img1, img2)
2.图像融合
将2张或以上的图像信息融合到1张图像上。融合的图像有更多信心,方便进行处理。例如消除照片中的不清晰部分。
#结果图像 = cv2.addWeighted(图像1, 系数1, 图像2, 系数2, 亮度调节量)
#结果图像 = 图像1*系数1 + 图像2*系数2 + 亮度调节量
#亮度调节量不能省略, 系数越小越淡
result = cv2.addWeighted(img1, 1, img2, 1, 0)
3.图像类型转换
OpenCV内置200+转换方法,以下用几个具有代表性的方法作为示例。
#彩色转灰度
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
#BGR转RGB
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
#灰度转BGR,从单通道变成3个有一样值的BGR通道。看起来还是灰色
img2 = cv2.cvtColor(img1, cv2.COLOR_GRAY2BGR)
4.图像缩放
#目标图像 = cv2.resize(原始图像,缩放大小)
#(122, 122)先列后行
img2 = cv2.rezise(img1, (122, 122))
#或者
rows, cols = img1.shape[:2]
img2 = cv2.rezise(img1, (round(cols*0.5), round(rows*1.2)))#用round取整
#目标图像 = cv2.resize(原始图像,缩放大小, fx, fy)
#fx, fy为缩放大小,1为不变
img2 = cv2.rezise(img1, None, fx = 0.5, fy = 0.7)
#缩放大小和fx,fy设置一个即可
5.图像翻转
#img2 = cv2.flip(img1, flipCode)
#flipCode = 0 以X轴为对称轴上下翻转
#flipCode > 0 以y轴为对称轴左右翻转
#flipCode < 0 以x, y轴为对称轴同时翻转
img2 = cv2.flip(img1, 1)
6.阈值分割
二进制阈值化 Threshold Binary
给定阈值,高于阈值的为最大值;小于阈值的为最小值。
反二进制阈值化 Threshold Binary, Inverted
给定阈值,高于阈值的为最小值;小于阈值的为最大值
截断阈值化 Truncate
比阈值大的值都被赋予阈值。
阈值化为0 Threshold to Zero
大于等于阈值的值不变,小于阈值的值化为0。
反阈值化为0 Threshold to Zero, Inverted
大于等于阈值的值化为0,小于阈值的值不变。
#retval, img2 = cv2.threshold(img1, threshold, maxval, type)
#retval:阈值, threshold: 阈值, maxval: 阈值分割以后的最大值, type: 类型。
#二进制阈值化
r, img2 = cv2.threshold(img1, 127, 255, cv2.THRESH_BINARY)
#反二进制阈值化
r, img2 = cv2.threshold(img1, 127, 255, cv2.THRESH_BINARY_INV)
#截断阈值化
r, img2 = cv2.threshold(img1, 127, 255, cv2.THRESH_TRUNC)
#阈值化为0
r, img2 = cv2.threshold(img1, 127, 255, cv2.THRESH_TOZERO)
#反阈值化为0
r, img2 = cv2.threshold(img1, 127, 255, cv2.THRESH_TOZERO_INV)
文章评论