私はiPadでキャプチャした画像のマーカーを検出しています。そのため、それらの間の平行移動と回転を計算したいので、これらのイメージのイメージの変更を変更したいので、マーカーの上に直接キャプチャしているように見えます。OpenCV:画像全体にwrapPerspective
として:今私は、これらの結果は、(warpPerspective
の結果のための右下の隅を見て)与え
points2D.push_back(cv::Point2f(0, 0));
points2D.push_back(cv::Point2f(50, 0));
points2D.push_back(cv::Point2f(50, 50));
points2D.push_back(cv::Point2f(0, 50));
Mat perspectiveMat = cv::getPerspectiveTransform(points2D, imagePoints);
cv::warpPerspective(*_image, *_undistortedImage, M, cv::Size(_image->cols, _image->rows));
を使用してい
結果画像の左上隅に認識マーカーが含まれていることがわかります。私の問題は、(切り抜かずに)画像全体をキャプチャしたいので、後でその画像上の他のマーカーを検出できるということです。
どうすればいいですか?たぶん私はsolvePnP
機能から回転/翻訳ベクトルを使用する必要がありますか?
EDIT:
生憎のワープ画像のサイズを変更すると、画像がまだ翻訳されているため、そのマーカーの左上隅には画像の左上隅にある、あまり役に立ちません。例えば
私が使用してサイズを倍増しました:私はこれらのイメージ受け取ってきました
cv::warpPerspective(*_image, *_undistortedImage, M, cv::Size(2*_image->cols, 2*_image->rows));
:
は、私は(結果のために編集された質問を見て)、それらを倍増して試してみたが、それはしませんでした私に有用な結果をもたらしました。 あなたは私のコードが不完全であると言います - 私は何よりも追加する必要がありますか?私は変換行列を得るために 'getPerspectiveTransform'を使用しています、そして、' dst'行列として検出されたマーカーの角の座標を使用しています(OpenCVドキュメンテーションによると - http://docs.opencv.org/modules/imgproc /doc/geometric_transformations.html#getperspectivetransform)。 – Axadiw
あなたの目標座標(-6、-6)などはちょっと変だと思います。これは、ターゲットの矩形が、結果のイメージ内のこれらの座標にあることを意味するためです。それらを移動するには、ターゲットの矩形をターゲット画像の中央に移動するだけです。 – littleimp
ありがとうございます - 間違ったpoints2D配列を投稿したことがわかりました(私は今質問で編集しました)。 これらの点を少しシフトすると出力画像全体が移動しましたが、まだ一部を切り取っています。 – Axadiw