我使用了四组点来获得透视变换矩阵。然后使用warpPerspective
将矩阵A
转换为矩阵B
。从Mat A指向一个点。我想让新点在Mat B上一个位置。但是warpPerspective
不能这样做,而perspectiveTransform
可以。
在这里,我想知道perspectiveTransform
的位置是否与使用warpPerspective
的矩阵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?
最佳答案
warpPerspective
适用于图像。换句话说,warpPerspective可以使图像A变形,并使用H(Homography或warpMatrix)将结果放入B中,因此它具有以下结构:
void warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
src
是您要变形的Mat
,即将结果存储在其中的dst
。perspectiveTransform
适用于点集。它将H(Homography或warpMatrix)应用于点集(例如,在vector
中),并将结果放入另一个vector
中。结果是应用扭曲后第一个vector
中的点。它具有以下结构:void perspectiveTransform(InputArray src, OutputArray dst, InputArray m)
其中
src
是输入点,dst
是使输入点变形的结果。结论:
在数学上是,它们都执行相同的操作,即使用H扭曲一组点。
从技术上来说是,
warpPerspective
在Mat
的坐标上执行此操作,并将像素值(颜色)移动到新的像素。 perspectiveTransform
,它仅计算该点的新坐标并将其存储在新的vector
中。关于c++ - warpPerspective和PerspectiveTransform有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34116357/