1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python透视变换原理_python cv2中的透视变换

python透视变换原理_python cv2中的透视变换

时间:2019-04-23 14:15:25

相关推荐

python透视变换原理_python cv2中的透视变换

透视变换的原理可以参看这篇博客,讲得相当好了

/guduruyu/article/details/72518340

唯一有一点问题是,博客中提到的透视变换公式:

与cv2中的不完全对应,cv2中的公式实际上是

其实原理上是一样的,但是这关系到输入数据的格式

按照原blog的公式,输入的点应该是[u,v,1],而实际上应该是[[u],[v],[1]]。花费一晚上踩的坑,希望对你有用。

另外,附上透视变换后,原图上的点的对应点的坐标求法:

#变换前的四个角点坐标

former = np.float32([[100, 0], [0, 100], [100, 100], [200, 0]])

#变换之后的四个角点坐标

pts = np.float32([[0, 0], [0, 100], [100, 100], [100, 0]])

#变换矩阵M

M = cv2.getPerspectiveTransform(former, pts)

#要变换的原图上的点坐标,注意这里是个二维矩阵!!,按照原博客应该是np.float32([100, 50, 1]),是不正确的

pt = np.float32([[100], [50], [1]])

#原坐标与变换矩阵运算,相当于将该点升维到三维空间

po = M @ pt

#将三维空间的点po的x,y值除以z坐标(拉伸系数,相当于归一化),

po = (po / po[2][0])

print(po)

#po的前两维就是透视变换后的点的x,y值

#当然这一过程可以用cv2中函数实现

print('函数得到的结果:', end='')

po1 = cv2.perspectiveTransform(np.array([[[100, 50]]], dtype=np.float32), M)

print(po1)

#po和po1的结果是一样的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。