失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > opencv 图像平移 缩放 旋转 翻转 图像仿射变换

opencv 图像平移 缩放 旋转 翻转 图像仿射变换

时间:2019-04-13 20:03:30

相关推荐

opencv 图像平移 缩放 旋转 翻转 图像仿射变换

图像几何变换

图像几何变换从原理上看主要包括两种:基于2x3矩阵的仿射变换(平移、缩放、旋转、翻转)、基于3x3矩阵的透视变换。

图像平移

opencv实现图像平移

实现图像平移,我们需要定义下面这样一个矩阵,tx和ty分别是x和y方向上平移的距离:

图像平移利用仿射变换函数 cv.warpAffine() 实现

实验

# 图像平移import numpy as npimport cv2 as cvimg = cv.imread('paojie.jpg')rows, cols = img.shape[:2]# 定义平移矩阵,需要是numpy的float32类型# x轴平移100,y轴平移50M = np.float32([[1, 0, 100], [0, 1, 50]])# 用仿射变换实现平移,第三个参数为dst的大小dst = cv.warpAffine(img, M, (cols, rows))cv.imshow('shift', dst)cv.waitKey(0)cv.destroyAllWindows()

实验结果

图像缩放

opencv中的图像缩放

缩放就是调整图片的大小,使用cv.resize()函数实现图像缩放。可以按照比例缩放,也可以按照指定的大小缩放。

实验

# 图像缩放import numpy as npimport cv2 as cvimg = cv.imread('paojie.jpg')# 按照指定的宽度、高度缩放图片res = cv.resize(img, (132, 150))# 按照比例缩放,如x,y方向均放大一倍# res2 = cv.resize(img, None, fx=2, fy=2, interpolation=cv.INTER_CUBIC)cv.imshow('shrink', res)# cv.imshow('zoom', res2)cv.waitKey(0)cv.destroyAllWindows()

实验结果

各种interpolation方式

参考:各种插值方法介绍

图像旋转

简介

旋转同平移一样,也是用仿射变换实现的,因此也需要定义一个变换矩阵。OpenCV直接提供了 cv.getRotationMatrix2D()函数来生成这个矩阵,该函数有三个参数:

参数1:图片的旋转中心

参数2:旋转角度(正:逆时针,负:顺时针)

参数3:缩放比例,0.5表示缩小一半

实验

# 图像旋转import numpy as npimport cv2 as cvimg = cv.imread('paojie.jpg')rows,cols = img.shape[:2]# 逆时针45°旋转图片并缩小一半,第一个参数为旋转中心M = cv.getRotationMatrix2D((cols / 2, rows / 2), 45, 0.5)# img:源图像;M:旋转仿射矩阵;(cols,rows):dst的大小dst = cv.warpAffine(img, M, (cols, rows))cv.imshow('rotation', dst)cv.waitKey(0)cv.destroyAllWindows()

实验结果

图像翻转

opencv中的图像翻转

dst = cv2.flip(img, 1)

其中,函数中的第二个参数大于0,表示图像水平翻转(沿y轴);第二个参数等于0,表示图像垂直翻转(沿x轴);第二个参数小于0,表示图像既水平翻转,又垂直翻转。

实验

# 图像翻转import numpy as npimport cv2 as cvimport matplotlib.pyplot as pltimg = cv.imread('paojie.jpg')# 水平翻转hor = cv.flip(img,1)# 垂直翻转ver = cv.flip(img,0)# 水平垂直翻转hor_ver = cv.flip(img,-1)plt.figure(1)plt.subplot(2,2,1)plt.imshow(img)plt.title('Original')plt.xticks([]),plt.yticks([])plt.subplot(2,2,2)plt.imshow(hor)plt.title('horizontal')plt.xticks([]),plt.yticks([])plt.subplot(2,2,3)plt.imshow(ver)plt.title('vertical')plt.xticks([]),plt.yticks([])plt.subplot(2,2,4)plt.imshow(hor_ver)plt.title('horizontal_and_vertical')plt.xticks([]),plt.yticks([])plt.show()

实验结果

看完了整篇文章,不点个赞放松一下。

如果觉得《opencv 图像平移 缩放 旋转 翻转 图像仿射变换》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。