OpenCV-Python Tutorials
https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html
图像的几何变换主要包括:缩放、平移、旋转、仿射、透视等等。图像变换是建立在矩阵运算基础上的,通过矩阵运算可以很快的找到对应关系。
图像缩放
主要函数
cv2.resize()
具体内容点击此处查看
注意:cv2.resize
函数的dst
和dsize
参数输入是 (宽度,高度)
,与img.shape
相反。
对于img.shape
的输出参数以及对应坐标请点击这里查看
import cv2
import numpy as np
import matplotlib.pyplot as plt
import os
os.chdir('C:/Users/lenovo/Pictures/')
dolphin = cv2.imread('dolphin.jpg')
#dst = cv2.resize(dolphin,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
#or
rows,cols = dolphin.shape[:2]
dst = cv2.resize(dolphin,(2*cols,2*rows),interpolation=cv2.INTER_CUBIC)#放大一倍
dst1 = cv2.resize(dolphin,None,fx=0.5,fy=0.5,interpolation=cv2.INTER_AREA)#缩小一倍
imgs = [dolphin,dst,dst1]
titles = ['dolphin','dst','dst1']
for i in range(len(imgs)):
plt.subplot(1,len(imgs),i+1)
imgs[i]=cv2.cvtColor(imgs[i],cv2.COLOR_BGR2RGB)
plt.imshow(imgs[i],'gray')
plt.title(titles[i])
plt.axis('off')
plt.show()
输出结果
通过坐标轴可以看到图像的放大和缩小
主要函数
dst = cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
-
src - 原输入图像
-
M - 仿射变换矩阵 ,一般反映平移或旋转的关系,为InputArray类型的2×3的变换矩阵
-
dsize - 输出变换图像的大小(这个大小如果不和原始图像大小相同,那么函数会自动通过插值来调整像素间的关系)
-
flags - 插值方法的组合(int 类型!)
-
borderMode - 边界像素模式(int 类型!)
-
borderValue - (重点!)边界填充值; 默认为0,即为黑色
-
flags:插值方法,共5种
- INTER_LINEAR - 双线性插值(默认)
- INTER_NEAREST - 最近邻插值
- INTER_AREA - 基于像素局部的重采样插值
- INTER_CUBIC - 三次样条插值
- INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos(兰索斯)插值
注意:也就是说cv2.warpAffine()
函数的dst
和dsize
参数输入是 (宽度,高度)
,与img.shape
相反。
对于img.shape
的输出参数以及对应坐标请点击这里查看
图像平移
如果想要沿(x,y)方向移动,移动的距离为(tx,ty)即沿着x轴平移距离tx,沿着y轴平移距离ty,可以以下面方式构建平移矩阵。通过numpy来产生这个矩阵M。
M = [ 1 0 t x 0 1 t y ] M=\begin{bmatrix} 1 & 0 & tx\\ 0 & 1 & ty \end{bmatrix} M=[1001txty]
将图像沿x轴平移300像素,沿y轴平移500像素
import cv2
import numpy as np
import matplotlib.pyplot as plt
import os
os.chdir('C:/Users/lenovo/Pictures/')
img = cv2.imread('dolphin.jpg')
#平移
M = np.float32([[1,0,300],[0,1,500]])#仿射矩阵
rows,cols = img.shape[: