1、变换
OpenCV提供了两个转换函数cv.warpAffine和cv.warpPerspective,您可以使用它们进行各种转换。cv.warpAffine采用2x3转换矩阵,而cv.warpPerspective采用3x3转换矩阵作为输入。
import cv2 as cv from google.colab.patches cv2_imshow image=cv.imread('变换.jpg') # 得到图片的高和宽 height,width=image.shape[:2] 定义对应的点 points1 = np.float32([[75,55],[340,[33,435],[400,433]]) points2 = np.float32([[0,0],[360,[0,420],420]]) 计算得到转换矩阵 M = cv.getPerspectiveTransform(points1,points2) 实现透视变换转换 processed = cv.warpPerspective(image,M,(360,1)">)) cv2_imshow(processed)
结果:
参考:https://zhuanlan.zhihu.com/p/37023649
2、缩放
缩放只是调整图像的大小。为此,OpenCV带有一个函数cv.resize()。图像的大小可以手动指定,也可以指定缩放比例。也可使用不同的插值方法。首选的插值方法是cv.INTER_AREA用于缩小,cv.INTER_CUBIC(慢)和cv.INTER_LINEAR用于缩放。默认情况下,出于所有调整大小的目的,使用的插值方法为cv.INTER_LINEAR。您可以使用以下方法调整输入图像的大小
numpy as np cv2 as cv img = cv.imread(messi5.jpg) res = cv.resize(img,None,fx=2,fy=2,interpolation = cv.INTER_CUBIC) 或者 height,width = img.shape[:2] res = cv.resize(img,(2*width,2*height),interpolation = cv.INTER_CUBIC)
结果:
3、平移
平移是对象位置的转换。 如果你知道(x,y)方向的偏移,让它为(tx,ty),你可以创建变换矩阵M,如下所示:
可以将其设置为np.float32类型的Numpy数组,并将其传递给cv.warpAffine()函数.
cv2 numpy as np img = cv2.imread(img.jpg,0) rows,cols = img.shape M = np.float32([[1,100],1,50]]) dst = cv2.warpAffine(img,(cols,rows)) cv2.imshow(imgdst4、图像旋转
通过变换矩阵实现图像旋转角度θ:
OpenCV提供可调旋转,旋转中心可调,因此可以在任何的位置旋转.修正的变换矩阵由下式给出:
为了找到这个转换矩阵,OpenCV提供了一个函数
cv2.getRotationMatrix2D
.img = cv.imread( img.shape cols-1 和 rows-1 是坐标限制 M = cv.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),90,1) dst = cv.warpAffine(img,rows))结果:
5、仿射变换
在仿射变换中,原始图像中的所有平行线在输出图像中仍将平行。为了找到变换矩阵,我们需要输入图像中的三个点及其在输出图像中的对应位置。然后cv.getAffineTransform将创建一个2x3矩阵,该矩阵将传递给cv.warpAffine。
查看以下示例,并查看我选择的点(以绿色标记):
img = cv.imread(drawing.png) rows,cols,ch = img.shape pts1 = np.float32([[50,50],[200,[50,200]]) pts2 = np.float32([[10,[100,250]]) M = cv.getAffineTransform(pts1,pts2) dst = cv.warpAffine(img,rows)) plt.subplot(121),plt.imshow(img),plt.title(Input) plt.subplot(122),plt.imshow(dst),1)">Output')结果:
6、透视变换
对于透视变换,您需要3x3变换矩阵。即使在转换后,直线也将保持直线。要找到此变换矩阵,您需要在输入图像上有4个点,在输出图像上需要相应的点。在这四个点中,其中三个不应共线。然后可以通过函数cv.getPerspectiveTransform找到变换矩阵。然后将cv.warpPerspective应用于此3x3转换矩阵。
请参见下面的代码:
img = cv.imread(sudoku.png img.shape pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]]) pts2 = np.float32([[0,[300,300],300 cv.getPerspectiveTransform(pts1,pts2) dst = cv.warpPerspective(img,(300,1)">)) plt.subplot(121),1)">) plt.show()结果:
参考:
http://woshicver.com/FifthSection/4_2_%E5%9B%BE%E5%83%8F%E5%87%A0%E4%BD%95%E5%8F%98%E6%8D%A2/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。