1

getPerspectiveTransform と cv::warpPerspective を使用して dst イメージに変換するよりも、ソース イメージがあるとします。その後、ソース画像に特別な点のベクトルがあり、dst画像でそれらを取得または描画したいのですが、それは明らかだと思いましたが、問題をよりよく説明するために、これを行いませんチェス盤を使ったサンプル:

.................................
transformationMatrix= cv::getPerspectiveTransform(src_Point, quad_pts);
            cv::warpPerspective(src, dst, transformationMatrix, dst.size()/,CV_INTER_LINEAR,cv::BORDER_ISOLATED); 

これで問題なく動作するので、src フレームのパースペクティブを変更しました。私のポイントを変換し、それらを dst に入れるには、この小さな関数を書きました

std::vector<cv::Point2f> warpStuff(std::vector<cv::Point2f> inputVector , cv::Mat transformationMatrix){
    cv::Matx33f warp = transformationMatrix;
    cv::Point3f homogenous;
    std::vector<cv::Point2f> result;

    for (int k  =0;  k < inputVector.size()-1; k++ ){
        homogenous = warp* inputVector[k];
        result.push_back(cv::Point2f(homogenous.x,homogenous.y));
    }

    return result;
}

dst で結果ベクトルを描画しようとすると、その位置にポイントが表示されませんか?

ここに私のソース画像があります 起源

変換後、結果をここに描画すると、次のようになります。

dst画像

問題は、cv::warpPerspective が変換マトリックスに加えて dst 画像のサイズを使用していることだと思います。デバッグしようとしましたが、このサイズで何をするのか本当にわからなかったので、これを追加できます私の機能に!

なにか提案を ?

4

0 に答える 0