1

ポイント交換したい。現時点では、私のコードは次のようになります。

std::vector<cv::Point3d> homCamPoints(4);
// some assignments to homCamPoints
std::vector<cv::Point2d> inhomCamPoints(4);
convertPointsFromHomogeneous(homCamPoints, inhomCamPoints);

しかし、メモリ位置に関する例外エラーが常に発生します。したがって、OpenCVのドキュメントには次のように書かれていますが、入力タイプが間違っていると思います。

  • src – N 次元の点の入力ベクトル。
  • dst – N-1 次元の点の出力ベクトル。

私の入力タイプは問題ないようです。ただし、インターネットではcv::Mat型を使用した例しか見つかりませんでしたが、時間の関係から、その段階での再構築は避けたいと思います。

コードをデバッグ モードで実行します。関数を呼び出すとき、パラメーターは本当に問題ないようです。関数を入力した直後にエラーが発生しますが、関数コード自体にアクセスできないため、正確にはわかりません。なぜこれが機能しないのか、誰にも分かりますか? ありがとう。

4

1 に答える 1

1

私はこれを試しました:

std::vector<cv::Point3d> homCamPoints(4, cv::Point3d(0,0,0));
homCamPoints[0] = cv::Point3d(0,0,0);
homCamPoints[1] = cv::Point3d(1,1,1);
homCamPoints[2] = cv::Point3d(-1,-1,-1);
homCamPoints[3] = cv::Point3d(2,2,2);

std::vector<cv::Point2d> inhomCamPoints(4);

cv::convertPointsFromHomogeneous(homCamPoints, inhomCamPoints);

そしてそれは例外なく機能します。問題がコードの別の場所にある可能性があります。inhomCamPoint は
[0, 0]、[1, 1]、[1, 1]、[1, 1] です。

于 2015-06-18T09:11:08.040 に答える