修改 EmguCV 以使用 P/Invoke 添加缺少的函数

本文关键字:添加 函数 Invoke EmguCV 修改 | 更新日期: 2023-09-27 17:57:25

我已经

一个月了,我正在制作一个机器人,它可以探索一个未知的区域,并使用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的新手)

这东西根本行不通。如果 a 在其上放置了一个断点并且 Visual Studio 命中它,它不会在断点处停止,只需继续!

请帮忙!任何帮助将不胜感激...

谢谢!

最好

修改 EmguCV 以使用 P/Invoke 添加缺少的函数

Affine3d Estimation 最近被添加到 git emgucv 存储库中(你可以在 cvInvokeCvExtern.cs 中找到它)。

否则,如果你想扩展你当前的 emgucv 版本,你可以使用以下命令 p/incallee:

[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);

我最终使用了一个名为Mobile Robotics Programming Toolkit的库,并制作了一个C++/CLI包装器来向c#公开函数...