python opencv入门 几何变换(11)
来源:互联网 发布:关于喝酒的网络歌曲 编辑:程序博客网 时间:2024/06/08 14:40
内容来自OpenCV-Python Tutorials 自己翻译整理
目标
移动、旋转、仿射变换等等
cv2.getPerspectiveTransform函数
变换
opencv中有cv2.warpAffine函数和 cv2.warpPerspective函数。上述函数可以实现所有类型的变换cv2.warpAffin参数是2*3的变换矩阵,cv2.warpPerspective函数是3*3的变换矩阵
放缩
放缩仅仅改变图像尺寸。opencv提供的函数cv2.resize()可以实现此功能。图片的尺寸可以手动指定,或者指定缩放因子。可以不同的插值运算方法。在缩放时推荐的插值运算方法是 cv2.INTER_AREA,在扩展时推荐使用v2.INTER_CUBIC(慢)和cv2.INTER_LINEAR。默认情况下改变图像大小的操作使用插值方法是cv2.INTER_LINEAR,可以使用任意一种方法改变图像尺寸。
import cv2import numpy as npimg = cv2.imread('3.jpg')#None为图像尺寸时,fx和fy参数是缩放因子res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)cv2.imshow('q',res)#两倍放大height, width = img.shape[:2]res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)cv2.imshow('p',res)cv2.waitKey(0)
平移
平移就是移动对象位置。如果你知道移动方向(x,y),移动距离是(tx,ty),可以创建如下矩阵。
可以将矩阵放进numpy的数组当中,存为np.float32类型,并将其传入cv2.warpAffine() 函数当中。下面例子移动了(100,50)。
import cv2import numpy as npimg = cv2.imread('3.jpg',0)rows,cols = img.shapeM = np.float32([[1,0,100],[0,1,50]])dst = cv2.warpAffine(img,M,(cols,rows))cv2.imshow('img',dst)cv2.waitKey(0)cv2.destroyAllWindows()
第三个参数是输出图像的大小,(宽,高),分别对应列数和行数
旋转
旋转矩阵如下:
在opencv中可以在任意位置旋转,所以矩阵如下
opencv提供了cv2.getRotationMatrix2D函数来实现旋转矩阵
下图对图片旋转90度,没进行放缩(图片略)
import cv2import numpy as npimg = cv2.imread('6.jpg',0)rows,cols = img.shapeM=cv2.getRotationMatrix2D((cols/2,rows/2),90,1)dst = cv2.warpAffine(img,M,(cols,rows))cv2.imshow('p',dst)cv2.waitKey(0)
仿射变换
仿射变换中,图中的平行线变换后依然平行。创建仿射变换矩阵需要在图像中找三个点和这三个点在输出图像的位置。使用cv2.getAffineTransform函数创建仿射变换矩阵,矩阵2*3,矩阵会被传递给cv2.warpAffine函数
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('7.jpg')rows,cols,ch = img.shapepts1 = 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,(cols,rows))plt.subplot(121),plt.imshow(img),plt.title('Input')plt.subplot(122),plt.imshow(dst),plt.title('Output')plt.show()
透视变换
透视变换需要3*3的矩阵,透视变换后直线还是直线,建立透视矩阵需要在图像上找4个点和在输出图像上的对应位置,四个点任意三个不能共线cv2.getPerspectiveTransform() 构建矩阵,并将矩阵传递到函数cv2.warpPerspective
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('7.jpg')rows,cols,ch = img.shapepts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])M = cv2.getPerspectiveTransform(pts1,pts2)dst = cv2.warpPerspective(img,M,(300,300))plt.subplot(121),plt.imshow(img),plt.title('Input')plt.subplot(122),plt.imshow(dst),plt.title('Output')plt.show()
产生近大远小的效果
- python opencv入门 几何变换(11)
- opencv-python几何变换
- opencv-python(8):几何变换
- python opencv 进行简单几何变换
- Python下opencv图像的几何变换
- python opencv入门 Hough直线变换(27)
- python opencv入门 Hough圆变换(28)
- Python下opencv使用笔记(三)(图像的几何变换)
- Python下opencv使用笔记(三)(图像的几何变换)
- Opencv3.0-python的那些事儿:(三)、Opencv的图像处理中的几何变换
- openCV—Python(5)——图像几何变换
- Cg入门11:Vertex Shader - 几何变换 —MVP矩阵变换(旋转、缩放)
- openCV—图像几何变换
- OpenCV 几何变换-图像缩放
- OpenCV 几何变换-图像平移
- OpenCV 几何变换-图像旋转
- opencv(12)---图像几何变换
- opencv 图像的几何变换
- 实习总结二
- UE4中窗口模式切换
- OpenCV的中求解线性问题或者最小二乘问题的方法cv::solve
- ELK
- 王爽汇编语言笔记——第十章检测点10.5(2)
- python opencv入门 几何变换(11)
- Android_BroadCast(广播)
- android各种文件夹路径
- Finereport和Finebi的区别
- Oracle结果集操作
- hive原理
- 神经网络 拓扑
- [BZOJ]1500 维修数列
- python数据可视化1