【OpenCV-Python】-几何变换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【OpenCV-Python】-几何变换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2517字,纯文字阅读大概需要4分钟。
内容图文
![【OpenCV-Python】-几何变换](/upload/InfoBanner/zyjiaocheng/834/5675c16986ea433c8b4ea816c232fbfb.jpg)
涉及函数:
cv2.getPerspectiveTransform()
cv2.warpAffine() 接收的参数是2??3的变换矩阵
cv2.warpPerspective() 接收的参数是3??3的变换矩阵
1、拓展缩放
只是改变图像的尺寸大小,cv2.resize()可以实现这个功能。在缩放时推荐cv2.INTER_AREA,
在拓展时推荐cv2.INTER_CUBIC(慢)和cv2.INTER_LINEAR。默认情况下所有改变图像尺寸大小的操作使用的是插值法都是cv2.INTER_LINEAR
import cv2 import numpy as np img = cv2.imread('./opencv_learn/image1.jpg', cv2.IMREAD_COLOR) #下面的None本应该是输出图像的尺寸,但是因为后面我们设置了缩放因子,所以,这里为None #or #这里直接设置输出图像的尺寸,所以不用设置缩放因子 res = cv2.resize(img, None, fx=2,fy=2,interpolation=cv2.INTER_CUBIC) height,width = img.shape[:2] res = cv2.resize(img, (2*width,2*height), interpolation=cv2.INTER_CUBIC) while(1): cv2.imshow('res',res) cv2.imshow('img',img) if cv2.waitKey(1)&0xFF ==27: break cv2.destroyAllWindows()
2、平移
如果想要沿(x,y)方向移动,移动的距离为(tx,ty)可以以下面方式构建移动矩阵。
可以使用Numpy数组构建矩阵,数据类型是np.float32,然后传给函数cv2.warpAffine()
函数cv2.warpAffine() 的第三个参数的是输出图像的大小,它的格式
应该是图像的(宽,高)。应该记住的是图像的宽对应的是列数,高对应的是行数。
3、旋转
对一个图像旋转角度θ,需要使用下面的旋转矩阵。
但OpenCVC允许在任意地方进行旋转,所以矩阵应该为
其中α = scale · cos θ
为构建旋转矩阵,OpenCV提供了一个函数cv2.getRotationMatrix2D
import numpy as np import cv2 img = cv2.imread('./opencv_learn/image1.jpg', cv2.IMREAD_COLOR) rows,cols = img.shape() #这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子 #可以通过设置旋转中心,缩放因子以及窗口大小来防止旋转后超出边界的问题。 M = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 0.6) #第三个参数是输出图像的尺寸中心 dst = cv2.warpAffine(img, M, (2*cols, 2*rows)) while(1): cv2.imshow('dst',dst) if cv2.waitKey(1)&0xFF ==27: break cv2.destroyAllWindows()
3、仿射变换
在仿射变换中,原图中所有的平行线在结果图像中同样平行。为了创建这 个矩阵我们需要从原图像中找到三个点以及他们在输出图像中的位置。然后 cv2.getAffineTransform 会创建一个 2x3 的矩阵,最后这个矩阵会被传给 函数 cv2.warpAffine。
import numpy as np import cv2 import matplotlib as mpl mpl.use("TkAgg") from matplotlib import pyplot as plt img = cv2.imread('./opencv_learn/image1.jpg', cv2.IMREAD_COLOR) rows, cols, ch =img.shape pts1 = np.float32([[50,50],[200,50],[50,200]]) pts2 = np.float32([[10,100],[200,50],[100,250]]) M = cv2.getAffineTransform(pts1, pts2) dst = cv2.warpAffine(img, M, (clos, rows)) plt.subplot(121,plt.imshow(img),plt.title('Input')) plt.subplot(121,plt.imshow(img),plt.title('Output')) plt.show()
内容总结
以上是互联网集市为您收集整理的【OpenCV-Python】-几何变换全部内容,希望文章能够帮你解决【OpenCV-Python】-几何变换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。