2

cv2.getPerspectiveTransform() を使用することが可能かどうか、また可能であればその方法を説明してください。

画像に関する 3D 情報があります。a、b の長さ、およびc、d、e、f、gのさまざまな高さを知っています。より多くの 3D 情報を取得するために高さを変えましたが、必要ない場合はそれが望ましいでしょう。

最終的には、カメラ フィードから取得した [x,y] 位置に変換を実装した後、ピンクの点が実際に四角形のどこにあるかを知る必要があります。

ここに画像の説明を入力

4

1 に答える 1

1

元画像の黒いポリゴンの四隅の位置(それぞれが2次元の点)をC,D,E,F、その位置をC',D',E',F'とするとターゲット画像の対応する点 (おそらく (0,0), (a, 0), (a, b), (0, b)), M = cv2.getPerspectiveTransform({C,D,E,F}, {C',D',E',F'}) は、あるポリゴンから別のポリゴンへの透視変換です。

元のイメージの黒いポリゴンへの g の垂直射影の位置 G が与えられると、ターゲット イメージでのその位置を cv2.transform(G, M) として計算できます。これは点 (x,y,z) を返します。ここで、最後の座標 z は正規化項です。この z は、ポイントがターゲット イメージの「無限遠」にある場合はゼロです。z がゼロでない場合、探している点は (x/z, y/z) です。

z がゼロの場合、点はベクトル (x, y) のサポートの方向に無限にあります (G が黒い多角形の 2 つの反対側の支持線の交点にある場合を考えてください。ソース画像)。

c、d、e、f、g の高さが等しいことがわかっている場合、これらの点も同一平面上にあり、まったく同じ方法が C、D、E、F の代わりに c、d、e、f、g に適用されます。 、G。

于 2013-09-28T18:16:20.417 に答える