OpenCV + Python如何实现几何变换

  介绍

这篇文章主要介绍了OpenCV + Python如何实现几何变换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

几何变换

图像的几何变换是指将一幅图像映射到另一幅图像内。有缩放,翻转,仿射变换,透视,重映射等操作。

1缩放

使用cv2.resize()函数实现对图像的缩放,但要注意cv2.resize()函数内的dsize参数与原图像的行列属性是相反的,也就是:目标图像的行数是原始图像的列数,目标图像的列数是原始图像的行数。

下面举例说明cv2.resize()函数的用法:

import  cv2   img=cv2.imread (& # 39; E:/python_opencv tupian.jpg& # 39;)   行,关口=img.shape[0:2],, #行数和列数等于img的长度和宽度   大?(int(关口* 0.9),int(行* 0.5)),,#比例:列变为原来0.9倍,行变为0.5倍   rst=cv2.resize (img、大小),,#将img按大小比例缩放   打印(& # 39;img.shape=& # 39;, img.shape)   打印(& # 39;rst.shape=& # 39;, rst.shape)

运行程序的结果如下:

img.shape=(600年,60岁,3)
rst.shape=(300年,54岁,3)

可以看的出,行数变为原来的0.5倍,列数变为原来的0.9倍。代码中大小的行列位置发生了交换。

2翻转

使用cv2.flip()函数对图像翻转,能够实现水平方向翻转,垂直方向翻转,两个方向同时翻转。

下面举例说明cv2.flip()函数的用法:

import  cv2   img=cv2.imread (& # 39; E:/python_opencv tupian.jpg& # 39;)   x=cv2.flip (img, 0),,, #图x对原图像绕x轴翻转   y=cv2.flip (img, 1),,, #图y对原图像绕y轴翻转   xy=cv2.flip (img, 1),, #图xy对原图像绕x轴y轴同时翻转   cv2.imshow (& # 39; img # 39;, img)   cv2.imshow (& # 39; x # 39;, x)   cv2.imshow (& # 39; y # 39;, y)   cv2.imshow (& # 39; xy # 39;, xy)   cv2.waitKey ()   cv2.destroyAllWindows ()

程序运行结果如下四幅图,第一幅是原图,第二幅是绕x轴翻转,第三幅是绕y轴翻转,第四幅是绕x轴y轴同时翻转。

 OpenCV + Python如何实现几何变换

 OpenCV + Python如何实现几何变换

 OpenCV + Python如何实现几何变换

 OpenCV + Python如何实现几何变换

3仿射

仿射变换是指图像实现平移,旋转等操作。

先设置一个变换矩阵M,然后使用cv2.warpAffine()函数对原图像和变换矩阵M进行仿射操作。

(一)平移

要实现图像的平移,我们先自定义一个转换矩阵,再进行仿射平移变换。例程如下:

import  cv2   import  numpy  as  np   img=cv2.imread (& # 39; E: \ python_opencv/tupian.jpg& # 39;)   高度、宽度=img.shape[2],,,,, #读取原图像的长和宽   x=100,,,,,,,,,,,,,,,,,,,,,, #自定义转换矩阵M的x轴移动值   y=200,,,,,,,,,,,,,,,,,,,,,, #自定义转换矩阵M的y轴移动值   M=np.float32 ([[1, 0, x], [0, 1, y]]),,,, #构造转换矩阵M   移动=cv2.warpAffine (img, M,(宽度、高度),,#平移映射   cv2.imshow(& # 39;原# 39;,img)   cv2.imshow(& # 39;行动# 39;,移动)   cv2.waitKey ()   cv2.destroyAllWindows ()

程序运行结果如下图所示,左为原图,右为平移后的图。

 OpenCV + Python如何实现几何变换

 OpenCV + Python如何实现几何变换

(二)旋转

使用函数cv2.getRotationMatrix2D()获得转移矩阵M,然后使用函数cv2.warpAffine()进行仿射旋转变换。例程如下:

import  cv2   img=cv2.imread (& # 39; E: \ python_opencv/tupian.jpg& # 39;)   高度、宽度=img.shape[2],, #读取原图像的长和宽   M=cv2.getRotationMatrix2D((宽/2,高/2),45岁,0.6),,#以中心为原点,逆时针旋转45°,且缩小为原图的0.6倍,获得转移矩阵M   旋转=cv2.warpAffine (img, M,(宽度、高度),,#旋转映射   cv2.imshow(& # 39;原始# 39;,img)   cv2.imshow(& # 39;旋转# 39;,旋转)   cv2.waitKey ()   cv2.destroyAllWindows ()

程序运行结果如下图所示,左为原图,右为旋转后的图。

OpenCV + Python如何实现几何变换