【CV】Opencv图像处理——①几何变换 (1)
1. 图像缩放
- API
cv2.resize(src,dsize # 绝对尺寸,直接指定调整后图像的大小fx=0, fy=0, # 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可(放大:设置为大于1的数;缩小:设置为小于1的数)interpolation = cv2.INTER_LINEAR)
- interpolation:插值方法
插值 | 含义 |
---|---|
cv2.INTER_LINEAR | 双线性插值法 |
cv2.INTER_NEAREST | 最近邻插值 |
cv2.INTER_AREA | 像素区域重采样(默认) |
cv2.INTER_CUBIC | 双三次插值 |
2. 图像平移
- API
cv.warpAffine(img, M, dsize)
- M:2*3移动矩阵
对于(x, y)处的像素点,要把它移动到(x+tx,y+ty)(x + t_x, y + t_y)(x+tx,y+ty)处时,M矩阵应如下设置:
M=[10tx01ty ]M = \begin{bmatrix}
1 & 0 & t_x \\
0 & 1 & t_y \\
~
\end{bmatrix}M=10 01txty,注意需要将M设置为np.float32类型的Numpy数组
- dsize:输出图像的大小
注意:输出图像的大小,它应该是**(宽度,高度)**的形式。其中,width = 列数,height = 行数
示例:
3. 图像旋转
图像旋转是指图像按照某个位置转动一定角度的过程,旋转中图像仍保持这原始尺寸。图像旋转后图像的水平对称轴,垂直对称轴及中心坐标原点都可能会发生变化,因此需要对图像旋转中的坐标进行相应转换。
- API
cv2.getRotationMatrix2D(center, # 旋转中心坐标angle, # 旋转角度scale) # 缩放比例(一般是缩放之后再进行旋转)
返回:M(旋转矩阵),然后调用cv.warpAffine完成图像的旋转
示例:
4. 仿射变换
图像的仿射变换涉及到图像的形状位置角度的变化,是深度学习预处理中常用功能,仿射变换主要是对图像的缩放,旋转,翻转和平移等操作的组合。
举例解释:
- API
# 创建变换矩阵
cv2.getAffineTransform(pts1, # 原始位置pts2) # 输出位置# 完成仿射变换
示例:
5. 透射变换
透射变换是视角变化的结果,是指利用透视中心,像点,目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。
- 找到变换矩阵API
# 创建变换矩阵
T = cv.getPerspectiveTransform(pst1, pst2)
# 进行变换
dst = cv.warpPerspective(img, T, (cols, rows))
示例:
6. 图像金字塔
图像金字塔是图像多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。
图像金字塔用于机器视觉和图像压缩,一副图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。
金字塔的底部是待处理的高分辨率表示,而顶部是低分辨率的近似,层级越高,图像越小,分辨率越低。
- API
cv.pyrUp(img) # 对图像进行上采样
cv.pyrDown(img) # 对图像进行下采样
- 示例