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 で結果ベクトルを描画しようとすると、その位置にポイントが表示されませんか?
ここに私のソース画像があります
変換後、結果をここに描画すると、次のようになります。
問題は、cv::warpPerspective が変換マトリックスに加えて dst 画像のサイズを使用していることだと思います。デバッグしようとしましたが、このサイズで何をするのか本当にわからなかったので、これを追加できます私の機能に!
なにか提案を ?