1

次のコードを使用して、カメラプレーンにリアルタイムでキャプチャされたフレームを取得するために、逆遠近法を取得しようとしました。

Mat dst;
    dst=dst.zeros(frame.cols,frame.rows,frame.type());  

    if(Found){

     Mat mmat;
     mmat.create(3,3,CV_32FC1);
     mmat=getPerspectiveTransform(templPoints,imgPoints);
     cout<< mmat<<endl<<endl;
     warpPerspective(frame,dst,Homo,dst.size(),INTER_LINEAR );
     imshow("out",dst);
    }

問題は、dstイメージが完全に黒であるということです。私のコードの何が問題になっていますか?

ここに画像の説明を入力してください

4

2 に答える 2

3

表示されているイメージは、通常、ソース ポイントをgetPerspectiveTransform間違った順序で に送信した結果です。これは、点が互いに交差していることを意味し、三角形が表示されます。ポイントの順序を確認し、目的のポイントの順序と一致していることを確認します。

于 2012-06-06T06:50:44.213 に答える
1

さらに詳細を提供する必要があります。findHomography と getPerspectiveTransform の両方を呼び出すのはなぜですか? 両方を呼び出しているので、templPoints と imgPoints の両方のサイズが 4 であると仮定します。この場合、findHomography の呼び出しは冗長です (RANSAC は何もしません)。

mmat * templPoints の値を (たとえば、matlab または octave を使用して、または手動で) 見ましたか? それらは imgPoints と等しくなければならず、すべて [0, dst.width] x [0, dst.height] 内にあります。

于 2012-06-05T20:13:17.293 に答える