1

我正在将使用旧 OpenCV 包装器的应用程序转换为 EmguCV(更新且非常好的包装器)。

到目前为止一切顺利,除了在我的一堂课中,我使用 3 个轨迹栏来调整某些过滤器中的阈值。轨迹栏是在旧包装器中使用此代码创建的,这正是它在 openCV C++ 中创建的方式

cvlib.cvCreateTrackbar("minH", "Couleur", ref dValueMin, 256, new cvlib.CvTrackbarDelegate(onTrackbarSlide));

跟踪栏是使用 OpenCV 的 HighGui 创建的,并且跟踪栏在我很确定 Emgu 团队从包装器中删除它并用更好的东西替换它,但我在文档中找不到任何相关信息。有人可以建议我如何实现这一目标吗?

谢谢!

PS:我已经用谷歌搜索了这个,所有问题都没有得到解答......我希望在 Stack Overflow 上能有更多的运气。

4

1 回答 1

1

如果仍然相关

public delegate void CallbackDelegate(int pos);
[DllImport("opencv_highgui249", CallingConvention = CallingConvention.Cdecl, EntryPoint = "cvCreateTrackbar")]
public static extern int CvCreateTrackbar([MarshalAs(UnmanagedType.LPStr)] String trackbar_name, [MarshalAs(UnmanagedType.LPStr)] String window_name,
       [In,Out] ref int value, int count, [MarshalAs(UnmanagedType.FunctionPtr)] CallbackDelegate callbackPtr);

public static IntPtr capture = IntPtr.Zero;

public static void myTrackbarCallback(int pos)
    {
        CvInvoke.cvSetCaptureProperty(capture, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_FRAMES, pos);
    }

...
CallbackDelegate cbd = new CallbackDelegate(myTrackbarCallback);
...
CvCreateTrackbar("Position", "original", ref currentPosition, frames, cbd);
于 2013-07-12T18:05:50.637 回答