0

未知の領域を探索し、Kinect センサーを使用して 3D マップを作成するロボットを作成してから、1 か月が経ちました。

私は C# 開発者なので、EmguCV を OpenCV ライブラリのラッパーとして使用して、その関数をコンピューター ビジョンに使用しています。

ある用途でOpenCVが提供する「estimateAffine3D」関数を使いたいのですが、まだEmguCVには追加されていません。したがって、「P/Invoke」呼び出しを使用して、Emgu と同じように関数を使用することを考えました。Emgu のソースを開くと、CvInvoke クラスと calib3d クラスが見つかりました。その中で、次のような関数を追加しました:

  [DllImport(OPENCV_CALIB3D_LIBRARY, CallingConvention = CvInvoke.CvCallingConvention)]
  [return: MarshalAs(CvInvoke.BoolToIntMarshalType)]
  public static extern bool cvEstimateAffine3D(
     IntPtr srcpt,
     IntPtr dstpt,
     out IntPtr outp,
     out IntPtr outliers,
     double ransacThreshold = 3.0f,
     double confidence = 0.99f);

(明らかなエラーについては申し訳ありません: 私は P/Invoking の初心者です)

ことはまったく機能しません。ブレークポイントを置いて Visual Studio がそれにヒットした場合、ブレークポイントで停止せず、そのまま続行してください!

助けてください!どんな助けでも大歓迎です...

ありがとう!

一番

4

2 に答える 2

1

最近、 Affine3d 推定がgit emgucv リポジトリに追加されました (cvInvokeCvExtern.cs にあります)。

それ以外の場合は、現在の emgucv バージョンを拡張したい場合は、これを使用して p/invoke できます。

[DllImport(EXTERN_LIBRARY, CallingConvention = CvInvoke.CvCallingConvention, EntryPoint = "CvEstimateAffine3D")] 
internal extern static int  _CvEstimateAffine3D(IntPtr src, IntPtr dst, IntPtr affineEstimate, IntPtr inliers, double ransacThreshold, double confidence);
于 2013-02-05T19:55:24.103 に答える
0

最終的に Mobile Robotics Programming Toolkit というライブラリを使用することになり、関数を C# に公開する C++/CLI ラッパーを作成しました...

于 2013-03-14T12:56:54.813 に答える