如何在OpenCV中将变换矩阵应用于一个点?

16
假设我有一个变换矩阵 Mat tr,这个矩阵是通过调用getAffineTransform()方法得到的,并且还有一个 Point2d类型的点 p。我想知道将点 p 根据变换矩阵 tr 进行变形后的结果点是什么。OpenCV 提供了相应的方法吗?
1个回答

24

cv::transform用于使用变换矩阵转换点。

将N通道数组src的每个元素解释为N元素向量,并使用M x N或M x(N+1)矩阵m将其转换为M元素向量 - 输出数组dst的对应元素。

该函数可用于N维点的几何变换,任意线性颜色空间变换(例如各种RGB到YUV变换),重排图像通道等。

InputArray文档中有一个简洁的例子(与此无关)。

std::vector<Point2f> vec;
// points or a circle
for( int i = 0; i < 30; i++ )
    vec.push_back(Point2f((float)(100 + 30*cos(i*CV_PI*2/5)),
                          (float)(100 - 30*sin(i*CV_PI*2/5))));
cv::transform(vec, vec, cv::Matx23f(0.707, -0.707, 10, 0.707, 0.707, 20));

你可以将Point2f转换为Mat,然后乘以矩阵。


1
非常感谢。它完全符合我的要求,我甚至已经有一个充满点的向量需要转换。此外,该文档页面中还有其他一些我想要的功能。非常有用。 - leinaD_natipaC
我想补充一点,如果您有旋转向量(角轴表示),您需要使用Rodrigues()函数将其转换为旋转矩阵,然后将其作为参数传递给transform() - off99555

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接