2011-04-09 2 views
1

私は画像と、その画像に適用したい回転行列と平行移動ベクトルを持っているとします。 opencvでそれをどうやって使うのですか?opencvでイメージに行列を適用するには?

私はいくつかの3Dポイント(x、y、相対zを持つ)と、関連する回転行列(3x3行列)を持ち、各点に回転行列を掛けたいとします。ポイントに「行動する」ようにしてください。

答えて

0

OpenCVのは、この目的のためにワープアフィン機能を持っています。

OpenCVの1(旧API):

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

OpenCVの2(新API):あなたは/ CV :: warpPerspectiveを使用する必要がありますすることができ3x3のために

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

...私を修正するために誰かのために大好きですか! 3D回転または平行移動を適用する場合、これは意味をなさない – user696977

+0

はい、画像は2D平面上の投影であるため、行列は2D回転および平行移動の基底ベクトルを格納します。あなたが達成したい3D変換の種類とあなたの前提について説明するために質問を更新してください。 –

+0

更新しました。ご協力いただきありがとうございます – user696977

0

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

もっと簡単な方法があれば、私は行列が2×3でなければなら

関連する問題