我正在使用 OpenCV 编写一些图像处理程序。
我需要使用几个透视变换来变换图像。透视变换由矩阵定义。我知道,我们可以通过简单变换矩阵(旋转、平移等)的乘法来获得复杂的仿射变换。但是当我尝试将两个透视变换矩阵相乘时,我没有得到对应于随后使用的第一个和第二个矩阵的变换矩阵。
那么,我怎样才能得到几个随之而来的透视变换的矩阵呢?
我正在使用 OpenCV 编写一些图像处理程序。
我需要使用几个透视变换来变换图像。透视变换由矩阵定义。我知道,我们可以通过简单变换矩阵(旋转、平移等)的乘法来获得复杂的仿射变换。但是当我尝试将两个透视变换矩阵相乘时,我没有得到对应于随后使用的第一个和第二个矩阵的变换矩阵。
那么,我怎样才能得到几个随之而来的透视变换的矩阵呢?
让你有两个透视矩阵 C:(x,y)->(u,v) 和 D:(u,v)->(r,g):
你试图得到 M:(x,y)->(r,g)
您应该将 (1),(2) 中的 ui 和 vi 代入方程 (3),(4)。
ui = (c00*xi + c01*yi + c02) / (c20*xi + c21*yi + c22) (1)
vi = (c10*xi + c11*yi + c12) / (c20*xi + c21*yi + c22) (2)
ri = (d00*ui + d01*vi + d02) / (d20*ui + d21*vi + d22) (3)
gi = (d10*ui + d11*vi + d12) / (d20*ui + d21*vi + d22) (4)
之后你可以看到 M = D*C