2011-04-09 36 views
1

说我有一些图像和旋转矩阵以及我想应用于该图像的平移矢量。我如何在opencv中应用它?我的假设是我有一些3D点(其中我有x,y,相对z)和相关的旋转矩阵(这是一个3x3矩阵),我希望将每个点乘旋转矩阵到让它在这些点上“行动”。如何将矩阵应用于opencv中的图像?

回答

0

OpenCV有一个warp affine函数为此目的。

的OpenCV 1(旧的API):

cvWarpAffine(&srcImage, &dstImage, &mat2x3) ; 
// dst size will be same as src size. 

的OpenCV 2(新API):

cv::warpAffine(&srcImage, &dstImage, &mat2x3, cvSize(dstWidth, dstHeight)) ; 
+0

矩阵必须是2×3?这在应用3D旋转或平移时没有意义 – user696977 2011-04-09 15:52:45

+0

是的,由于图像是2D平面上的投影,矩阵存储2D旋转和平移的基向量。请更新您的问题,以解释您想实现什么样的3D转换,以及您的假设是什么。 – 2011-04-09 21:10:02

+0

已更新。谢谢你的帮助 – user696977 2011-04-09 21:22:22

0

对于一个3x3,你可以/应该使用CV :: warpPerspective。

cv::warpPerspective(image, warpedImage, warpMat, destinationSize); 

我不知道是否有一个表现的理由这样做,但是......

您可以使用warpAffine为好,但你确实有到矩阵转换成2×3的扭曲了。 opencv API让人非常痛苦。

cv::Mat af0 = affine2x3.row(0); // cannot copy directly for some reason 
affine3x3.row(0).copyTo(af0); 

cv::Mat af1 = affine2x3.row(1); 
affine3x3.row(1).copyTo(af1); 

cv::warpPerspective(image, warpedImage, affine2x3, destinationSize); 

如果有一个更简单的方法,我很乐意有人纠正我......

相关问题