1

OpenCVから持っているアフィンマトリックスを取得したいと思います。

Mat T = getAffineTransform(src_pt, dst_pt);

次に、Core Graphics / Objective-C/iOSで使用するためにCGAffineTransformに変換します。(CGAffineTransformドキュメント

私はもう試した:

CGAffineTransform t = CGAffineTransformIdentity;
t.a = T.at<float>(0,0);
t.b = T.at<float>(0,1);
t.c = T.at<float>(1,0);
t.d = T.at<float>(1,1);
t.tx = T.at<float>(0,2);
t.ty = T.at<float>(1,2);

これは、xおよびyの変換では正常に機能しますが、マトリックスに回転がある場合は機能しません。結果の画像が奇妙に歪んでいるように見えるため、何かが欠落しているようです。.bと-1を掛けて、.cとを切り替え.b.cみましたが、どちらもうまくいかなかったようです。画像はまだ正しく歪んで表示されていません。

編集:私はそれがほぼ正しく回転していることを言及する必要があります。bとcを切り替えると、少なくとも正しい方向に回転します。少し回転しすぎているように、少しずれているように見えます。

4

1 に答える 1

1

あなたの問題は、opencvが行メジャーであり、CGAffineTransformが必要な列メジャーであるということです

t.a = T.at<float>(0,0);
t.b = T.at<float>(1,0);
t.c = T.at<float>(0,1);
t.d = T.at<float>(1,1);

ドキュメントではCGAffineTransformが次の形式をとるのでわかります

[a  b  0
 c  d  0
 tx ty 1]

txとtyが一番下の行にあることに注意してください。標準行の主行列では、変換コンポーネントは右端の列に配置されます

[a c tx
 b d ty
 0 0 1]

この変更を行っても問題が解決しない場合(あなたの質問はすでに試したことがあることを示唆しています)、さらに情報を投稿する必要があります。あなたが示唆しているように、問題はあなたの座標系の起源にある可能性がありますが、あなたの起源についての情報がなければ、誰もあなたを助けることができません。

于 2013-01-18T00:08:58.390 に答える