前言
需求: 将一个梯形变为需要的图形,后续需要持续进行映射。让整张图像的所有点位都按照这样的映射关系进行映射。
正文
一、透视变换相关介绍
从名称中可以清楚地看出,透视变换研究是坐标变化之间的关系。这种类型的转换不保留信息的平行度、长度和角度。但它们确实保留了共线性和关联性。这意味着即使在变换之后直线仍将保持直线。
二、补充仿射变换的补充
透视变换和仿射变换都是图像处理中常用的几何变换方法,但它们之间存在一些区别。
透视变换是一种非线性变换,它可以通过调整图像中物体的尺寸和位置关系,使其看起来更符合人眼的视觉感受。透视变换需要至少4个点来确定一个透视变换矩阵。
仿射变换是一种线性变换,它可以通过调整图像中物体的位置、旋转和缩放关系,来实现图像的变换。仿射变换需要至少3个点来确定一个仿射变换矩阵。
因此,透视变换和仿射变换虽然都可以实现图像的变换,但它们的应用场景和变换效果是不同的。透视变换主要用于处理三维场景中的透视投影问题,而仿射变换则更适用于处理二维场景中的平移、旋转和缩放等问题。
三、实验效果图
原图:
效果图:
四、示例代码
def testWarp():
img = cv2.imread("C:\\Users\\19242\\Desktop\\Image\\Test.png")
plt.imshow(img[:,:,::-1])
# plt.show()
inputPts = np.float32([[407,242],[931,232],[1166,477],[183,477]])
outputPts= np.float32([[10,10],[310,0],[310,310],[10,310]])
M = cv2.getPerspectiveTransform(inputPts, outputPts)
dst = cv2.warpPerspective(img, M, (400,400))
plt.imshow(dst[:,:,::-1])
plt.show()
# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
#print_hi('PyCharm')
testWarp()