使用 Emgucv 时 c# GTK 2 & 3 发生冲突

c# GTK 2 & 3 conflict when using Emgucv

我在将 Emgu 与 class 'ImageViewer'

一起使用时发现了一个奇怪的冲突

当我没有静态 class 成员时,一切正常。例如,下面的代码

using Emgu.CV;
using Emgu.CV.Util;
using Emgu.CV.UI;

namespace TmpTest
{
    class TmpTest
    {
        private Mat img = new Mat();  // a non-static class member is OKey
        public static void Main(string[] arg)
        {
            SDKWrapper util = new SDKWrapper();
            ImageViewer viewer = new ImageViewer ();
            VideoCapture capture = new VideoCapture ();

            Application.Idle += new EventHandler (delegate(object sender, EventArgs e) {
                Mat read_frame = capture.QueryFrame();
                util.processFrame(read_frame);
                util.drawSkeleton(read_frame);
                viewer.Image = read_frame;
            });
            viewer.ShowDialog ();  
            return;
        }
    }
}

但是我一添加静态成员class,比如把private Mat img改成private static Mat img,我马上就报这样的运行时错误

Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported

我正在使用 ubuntu 16.04 和单一开发,有人知道发生了什么以及如何解决吗?

Emgu CV 是 OpenCV 的 .Net 包装器。根据您使用的 OpenCV 版本,它可以针对 GTK 2 或 GTK 3 构建,但通常是针对 GTK 2。但是,应用程序不能同时使用 GTK 2 和 GTK 3。所以我认为 OpenCv 部分使用 GTK 2,而你还有其他东西在拉动 GTK 3。你应该检查你正在使用的 emgu CV 的二进制文件依赖于哪些库。