使用 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 的二进制文件依赖于哪些库。
我在将 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 的二进制文件依赖于哪些库。