warpPerspective和perspectiveTransform之间有所不同

时间:2015-12-06 10:27:37

标签: c++ opencv transform

我使用了四组点来获得一个PerspectiveTransform矩阵t。然后使用warpPerspective将Mat A转换为Mat B.从Mat A中指出a。我想让新的Point在Mat B.中获得一个位置wartPerspective( )perspectiveTransform可以做到这一点。在这里,我想通过使用warpPerspective来了解perspectiveTransform中的位置是否与Mat B中的位置相同。 那么,warpPerspective和perspectiveTransform之间的区别是什么?

Mat trans = getPerspectiveTransform(dst, gpsPoints);
warpPerspective(A, B, trans, image.size());
Point2f a = Point2f(..., ...);         //were known
vector<Point2f> obj(1);
obj[0] = a;
vector<Point2f> b; 
perspectiveTransform(obj, b, trans);//if the new point in B is c, is c equals to b?

1 个答案:

答案 0 :(得分:6)

warpPerspective适用于图片。换句话说,warpPerspective可以使用H(Homography或warpMatrix)扭曲图像A并将结果放入B中,因此它具有以下结构:

void warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())

src是您想要变形的Matdst将存储结果。

perspectiveTransform适用于一组积分。它在点集上应用H(Homography或warpMatrix)(例如在vector中)并将结果放在另一个vector中。结果是应用变形后第一个vector中的点。它有以下结构:

void perspectiveTransform(InputArray src, OutputArray dst, InputArray m)

其中src是输入点,dst是扭曲输入点的结果。

结论

数学,他们都做同样的事情,即使用H扭曲一组点。

技术warpPerspectiveMat的坐标上执行此操作,并将像素值(颜色)移动到新像素。 perspectiveTransform,它只是计算点的新坐标并将其存储在新的vector中。