c++ - warpPerspective 和 perspectiveTransform 有什么区别?

标签 c++ opencv transform

我使用了四组点来获得透视变换矩阵。然后使用 warpPerspective 将矩阵 A 转换为矩阵 B。从 Mat A 点 a。我想在 mat B 中获取新点 a 的位置。但是 warpPerspective 不能做到这一点,而 perspectiveTransform 可以。

这里我想知道perspectiveTransform得到的位置是否和使用warpPerspective得到的矩阵B中的位置相同。

那么,warpPerspectiveperspectiveTransform 有什么区别?

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 是您要变形的 Matdst 将存储结果。

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

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

其中src是输入点,dst是输入点变形的结果。

结论:

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

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

关于c++ - warpPerspective 和 perspectiveTransform 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34116357/

相关文章:

c++ - 在 QT-C++ 中制作 exe 文件缺少 qt5cored dll

c++ - 如何添加带有 QListView 项目的复选框?

c++ - 如何创建 NVIDIA OpenCL 项目

opencv中的Matlab梯度等效

css - 转换:translateY(-50%) 在 Safari 中不起作用

c++ - 在 C++ 中创建 .dat 文件

c++ - 使用 inrange (OpenCV) 对 RGB 图像进行阈值处理

python - 类型错误 : Argument given by name ('k' ) and position (2)

javascript - 如何将字符串转换为日期 JavaScript?

c - fftw3 逆变换不起作用