一个月了,我正在制作一个机器人,它可以探索一个未知的区域,并使用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 命中它,它不会在断点处停止,只需继续!
请帮忙!任何帮助将不胜感激...
谢谢!
最好
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#公开函数...