如何在opencv中将矩阵应用于图像?

时间:2011-04-09 03:54:45

标签: c opencv computer-vision

假设我有一些图像以及我想要应用于该图像的旋转矩阵和平移向量。我如何在opencv中应用它?

我的假设是我有一些3D点(我有x,y,相对z)和相关的旋转矩阵(它是一个3x3矩阵),我希望将每个点乘以旋转矩阵,它在行动中“行动”。

2 个答案:

答案 0 :(得分:0)

OpenCV为此目的有一个 warp仿射功能。

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)) ;

答案 1 :(得分:0)

对于3x3,您可以/应该使用cv :: warpPerspective。

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

我不确定是否有性能原因,但......

您也可以使用warpAffine,但实际上您必须在变形前将该矩阵转换为2x3。 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 );

如果有更简单的方法,我会爱一个人来纠正我......