有什么网站可以免费搭建网址,商业网站建设规划范文,免费搭建网站,php网站开发用什么php图像矫正
图像矫正的原理是透视变换#xff0c;下面来介绍一下透视变换的概念。
听名字有点熟#xff0c;我们在图像旋转里接触过仿射变换#xff0c;知道仿射变换是把一个二维坐标系转换到另一个二维坐标系的过程#xff0c;转换过程坐标点的相对位置和属性不发生变换下面来介绍一下透视变换的概念。
听名字有点熟我们在图像旋转里接触过仿射变换知道仿射变换是把一个二维坐标系转换到另一个二维坐标系的过程转换过程坐标点的相对位置和属性不发生变换是一个线性变换该过程只发生旋转和平移过程。因此一个平行四边形经过仿射变换后还是一个平行四边形。 而透视变换是把一个图像投影到一个新的视平面的过程在现实世界中我们观察到的物体在视觉上会受到透视效果的影响即远处的物体看起来会比近处的物体小。透视投影是指将三维空间中的物体投影到二维平面上的过程这个过程会导致物体在图像中出现形变和透视畸变。透视变换可以通过数学模型来校正这种透视畸变使得图像中的物体看起来更符合我们的直观感受。通俗的讲透视变换的作用其实就是改变一下图像里的目标物体的被观察的视角。 其中x、y是原始图像点的坐标$x^{\prime}$、$y^{\prime}$是变换后的坐标a11a12…,a33则是一些旋转量和平移量由于透视变换矩阵的推导涉及三维的转换所以这里不具体研究该矩阵只要会使用就行而OpenCV里也提供了getPerspectiveTransform()函数用来生成该3*3的透视变换矩阵。 例如 cv2.getPerspectiveTransform(src, dst) 功能cv2.getPerspectiveTransform(src, dst) 参数 src: 源图像中的四个点通常是一个形状为 (4, 2) 的 numpy 数组或类似的数据结构表示四个点的坐标。这四个点应该按照某种顺序排列例如顺时针或逆时针因为变换矩阵的计算依赖于这个顺序。 dst: 目标图像中的四个点与 src 参数类似也是一个形状为 (4, 2) 的 numpy 数组或类似的数据结构表示变换后四个点应该位于的位置。 函数返回一个 3x3 的变换矩阵可以使用 cv2.warpPerspective() 函数将这个矩阵应用于图像从而执行透视变换。 cv2.warpPerspective(src, M, dsize, dstNone, flagscv2.INTER_LINEAR, borderModecv2.BORDER_CONSTANT, borderValueNone) 功能用于对图像进行透视变换的函数 参数 src: 输入图像即你想要进行透视变换的源图像。 M: 透视变换矩阵通常是一个 3x3 的矩阵可以通过 cv2.getPerspectiveTransform() 函数计算得到。这个矩阵定义了源图像中的点如何映射到目标图像中的点。 dsize: 输出图像的尺寸以 (width, height) 的形式表示。这是变换后图像的尺寸。 dst: 输出图像这是一个可选参数。 flags: 插值方法。 borderMode: 边界填充方法。 borderValue: 边界颜色【可选】。 import cv2
import numpy as npimg cv2.imread(../1iamge/test3.jpg)points1 np.float32([[420,155],[787,314],[12,522],[412,741]])
points2 np.float32([[min(points1[:,0]),min(points1[:,1])],[max(points1[:,0]),min(points1[:,1])],[min(points1[:,0]),max(points1[:,1])],[max(points1[:,0]),max(points1[:,1])],])
M cv2.getPerspectiveTransform(points1,points2)
img_warp cv2.warpPerspective(img,M,(img.shape[1],img.shape[0]))
cv2.imshow(img,img)
cv2.imshow(img_warp,img_warp)
cv2.waitKey(0)
原图 效果