0

一个月过去了,我正在制作一个机器人,它可以探索未知区域并使用 Kinect 传感器制作 3D 地图。

由于我是 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 Estimation最近已添加到 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++/CLI 包装器来将函数公开给 c#...

于 2013-03-14T12:56:54.813 回答