您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:OpenCV图像处理之七种常用图像几何变换

51自学网 2022-02-21 10:45:30
  python
这篇教程OpenCV图像处理之七种常用图像几何变换写得很实用,希望能帮到您。

0 程序环境与所学函数

本章程序运行需要导入下面三个库,并定义了一个显示图像的函数

所学函数

##放大、缩小cv.resize(img,dsize,[interpolation])##平移变换M = np.array([[...]], dtype=np.float32)cv.warpAffine(img, M, dsize)##镜像变换cv.flip(img, 1) # 垂直镜像cv.flip(img, 0) # 水平镜像cv.flit(img, -1) # 水平垂直同时进行##旋转变换M = cv.getRotationMatrix2D(center, angle, scale)img_rotate = cv.rotate(img, cv.ROTATE_90_CLOCKWISE)##透视变换M = cv.getPerspectiveTransform(src, dst)img = cv.warpPerspective(img, M, dsize)

1 裁剪、放大、缩小

读入图像

img =  cv.imread('pic/rabbit500x333.jpg')show(img)

显示

裁剪:数组选择方法(冒号)

#裁剪rabbit = img[150:450:] #限定行数,列数和三通道show(rabbit)

显示

放大和缩小:resize()函数

插值方法

程序实现

#放大缩小#cv.resize(img,dsize,[interpolation])  dsize表示大小,[interpolation]是插值方法,可选,有默认值img2 = cv.resize(img,(500,400))  #放大为宽500高400#使用定义插值方法#一般来说放大地话选择LINEAR方法,缩小选择AREA方法img3 = cv.resize(img,(500,400),interpolation=cv.INTER_NEAREST)show(np.hstack([img2,img3]))

显示

2 平移变换

原理、平移矩阵推导

读入图像

img = cv.imread('pic/rabbit500x333.jpg')show(img)

显示

程序实现

# M = np.array([[...]],dtype=np.float32) # cv.warAffine(img,M,dsize) cv里面图像仿射变换函数,M是上面矩阵,dsize是输出图像大小M=np.array([    [1,0,100],    [0,1,50]],dtype=np.float32)  #水平向右平移100个像素点,竖直向下平移50个像素点,原理见理论部分 img2 = cv.warpAffine(img,M,(333,500))show(img2)

显示

3 错切变换

原理、错切矩阵推导

读入图像

img = cv.imread('pic/rabbit500x333.jpg')show(img)

显示

水平错切

M = np.array([    [1,0.2,0],    [0,1,0]],dtype=np.float32) img3 = cv.warpAffine(img,M,(533,500))show(img3)

显示

垂直错切

M = np.array([    [1,0,0],    [0.3,1,0]],dtype=np.float32) img3 = cv.warpAffine(img,M,(333,700))show(img3)

显示

4 镜像变换

原理、镜像矩阵推导

读入图像

img = cv.imread('pic/rabbit500x333.jpg')show(img)

显示

水平镜像

Mx = np.array([    [-1,0,333],    [0,1,0]],dtype = np.float32)img2 = cv.warpAffine(img,Mx,(333,500))  #仿射变换函数show(img2)

显示

垂直镜像

My = np.array([    [1,0,0],    [0,-1,500]],dtype=np.float32) img3 = cv.warpAffine(img,My,(333,500))show(img3)

显示

opencv内置函数实现镜像变换

#垂直镜像 cv.flip(img,1)

#水平镜像 cv.flip(img,0)

#水平垂直同时进行 cv.flip(img,-1)

程序实现

img4 = cv.flip(img,1)  #垂直镜像img5 = cv.flip(img,0)  #水平镜像img6 = cv.flip(img,-1) #水平垂直镜像同时进行 show(np.hstack([img4,img5,img6]))

显示

5 旋转变换

原理、旋转矩阵推导

读入图像

img = cv.imread('pic/rabbit500x333.jpg')show(img)

显示

图像旋转

beta = np.pi/4#旋转矩阵M  = np.array([    [np.cos(beta),np.sin(beta),0],    [-np.sin(beta),np.cos(beta),0]],dtype=np.float32) img2 = cv.warpAffine(img,M,(633,300))show(img2)

显示

opencv内置获取旋转矩阵函数:

M = cv.getRotationMatrix2D(center,angle,scale)
Python面向对象之类和对象
python绘制超炫酷动态Julia集示例

万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。