图像加法
要求图像大小相同
- cv加法饱和操作
- img3=cv.add(img2,img1)
- 超出255就取255
- numpy模运算
- img3=img2+img1
- 超出255就取模运算 254+3=1
图像混合
本质也是加法,不过是不同的权重
cv.addWeighted( pic1, a, pic2, b, c)
pic3=pic1*a+pic2*b+c
一般情况下权重和为1
例:img2 = cv.addWeighted(img1, 0.7, img2, 0.3, 0)
图像缩放
cv.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINER)
- src:输入图像
- dsize:绝对尺寸,直接指定调整后图像的大小,为多余黑色区域整体大小
- fx,fy:相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可
- 宽×高 即为cols*rows
- interpolation:插值方法
- cv2.INTER_LINEAR 双线性插值法
- cv2.INTER_NEAREST 最近邻插值
- cv2.INTER_AREA 像素区域重采样(默认)
- cv2.INTER_CUBIC 双三次插值
[0:2]是切片的意思 相当于对获取的列表[0:2]切片赋值
img.shape返回一个列表,分别为[长,宽,通道]
img.shape[:2] 取彩色图片的长、宽。
如果img.shape[:3] 则取彩色图片的长、宽、通道。
关于img.shape[0]、[1]、[2]
img.shape[0]:图像的垂直尺寸(高度或长度)
img.shape[1]:图像的水平尺寸(宽度)
img.shape[2]:图像的通道数
在矩阵中,[0]就表示行数,[1]则表示列数。
import cv2
import matplotlib.pyplot as plt
import cv2 as cv
img=cv.imread("/Users/liruiyan/Downloads/IMG_9502.JPG")
rows,cols=img.shape[:2]
res=cv.resize(img, (rows*2, cols*2), interpolation=cv2.INTER_LINEAR)
cv.imshow("content", res)
cv.waitKey(0)
res=cv.resize(img, None,fx=0.5,fy=0.5 interpolation=cv2.INTER_LINEAR)
cv.imshow("content", res)
cv.waitKey(0)
图像平移
cv.warpAffine(img,M,dsize)
M为变换矩阵
创建平移矩阵M=np.float32( [ [ 1, 0, 100] , [ 0, 1, 50] ] )
dsize为最后大小(cols,rows)
图像旋转
生成旋转矩阵M = cv.getRotationMatrix2D(center,angle,scale)
- center为旋转中心点
- angle为旋转角度
- scale为缩放比例 0.5就是旋转后缩小一半
用图像变换带入旋转矩阵
cv.warpAffine(img,M,dsize)
仿射变换
给定3个点,原图的三个点映射到新图的三个点上,整个图对应变换
pts1=np.float32( [ 50, 50],[200, 50], [50, 200] ) 原图中三个点
pts2=np.float32( [ 100, 100],[200, 50], [100, 250] ) 目标图像三个点位置
M=cv.getAffineTransform(pts1,pts2) 得到变换矩阵
res=cv.warpAffine(img,M,(cols, rows))
透射变换
pst1=np.float32( [ 50, 50],[200, 50], [50, 200], [130, 50] ) 给定四个点
pst1=np.float32( [ 150, 50],[300, 50], [150, 200], [140, 50] )
M = cv.getPerspectiveTransform( pst1, pst2)
dst=cv.warpPerspective(img, M, (cols, rows))
图像金字塔
图像金字塔是图像多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。
用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。
金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似,层级越高,图像越小,分辨率越低。
cv.pyrUp(img)
cv.pyrDown(img)
img1 = cv.pyrUp(img) # 上采样操作
img2 = cv.pyrDown(img) # 下采样操作