0

OpenCV で画像にアフィン変換を適用すると、その結果がプレビュー ウィンドウに表示されず、ウィンドウ全体が黒くなる理由を見つけようとしています。適用された変換に関係なく、常にウィンドウに変換された画像 (アフィン変換の結果) を表示できますか?
更新:これは、すべての変換が座標系の原点(画像の左上隅)に対して計算されるために発生すると思います。回転の場合は回転の中心を指定でき、結果を表示できますが、スケーリングを実行すると、変換された画像の移動先を制御できません。画像がウィンドウに収まるように座標系を何らかの方法で移動することは可能ですか?

Update2: ある位置に ROI のみを含む画像 (画像の残りの部分は黒) があり、一連のアフィン変換を適用する必要があります。物事を単純化し、個々の変換の効果を確認するために、各変換を 1 つずつ適用しました。私が気づいたのは、ROI の中心が座標系の中心 (ビュー ウィンドウの左上隅) になるように画像を移動 (平行移動) するたびに、すべてのアフィン変換が移動せずに正しく実行されることです。ただし、ROI の中心を座標系の中心に移動すると、ROI の上部と左側の部分が現在のビュー ウィンドウから切り取られたままになります。ROI の中心点をビュー ウィンドウ内の別の点 (ウィンドウの中心など) に移動すると、次のタイプのアフィン変換が行われます: A=[a 0 0; 0 b 0] (A は 2x3 行列、warpAffine 関数のパラメーター) は、画像 (ROI) をビュー ウィンドウの外に移動します (ROI の中心が左上隅にある場合は移動しません)。画像がその場所から移動しないようにアフィン変換を変更するにはどうすればよいですか (ROI の中心が座標系の中心にある場合と同じように動作します)。

4

1 に答える 1

2

アフィン変換を適用できるようにしたい場合、常に表示できるとは限りません。より良いアイデアは、変換を正方形の 4 つの角に手動で適用し、それらの 4 つの点が終了する座標を調べることです。それはあなたのイメージがどこに向かっているのかを教えてくれます。

複数の変換がある場合は、それらを 1 つの変換に結合するだけです。変換が 3 つある場合

[A],[B],[C]

画像を A​​、次に B、次に C で変換することは、画像を次のように 1 回変換することと同じです。

[C]*[B]*[A]

変換が 2x3 マトリックスにある場合は、追加して 3x3 マトリックスに変換するだけです。

[0,0,1]

新しい一番下の行として、次に3x3行列を掛け合わせます。終了したら、一番下の行は変更されません。それをドロップして、新しい結合されたアフィン変換を取得します

更新 オブジェクトが別の場所にあるかのようにオブジェクトに変換を適用する場合。3 つの変換を組み合わせることができます。最初に、アフィン変換 [A] を使用して、オブジェクトを変換する場所 (この場合は座標系の中心) に変換します。次に、スケーリング変換 [B] を適用してから、翻訳を開始した場所に戻します。翻訳は、[A] の逆にする必要があります。つまり、最終的な変換は

final_transform = [A].inv()*[B]*[A]

行列の乗算を行う場合、操作の順序は右から左に読み取られます。

于 2012-10-24T16:41:37.753 に答える