我将OpenCV库用于使用Gtkmm图形界面的程序中,但是当我尝试用cv :: imread打开图像时,在执行过程中出现错误消息:gtk-error **使用gtk + 2.x和gtk + 3在同一进程中不受支持。如何解决Opencv和GTKmm之间的冲突?
这里是一个非常简单的示例代码:
#include <gtkmm/main.h>
#include <gtkmm/window.h>
#include <gtkmm/image.h>
#include "opencv2/highgui/highgui.hpp"
int main(int argc, char* argv[]) {
Gtk::Main app(argc, argv);
Gtk::Image ImgGtk;
Gtk::Window Win0;
cv::Mat ImgOcv;
Win0.set_border_width(5);
Win0.set_default_size(250, 100);
ImgOcv= cv::imread("icone.png", -1);
ImgGtk.set("icone.png");
Win0.add(ImgGtk);
Win0.show_all();
Gtk::Main::run(Win0);
return 0;
}
我们的想法是,以取代 “ImgGtk.set(” icone.png “);”由一个create_from_data和一个gtk_img.set(pixbuf)或者一些相似的东西。 上面的代码编译链接很好,但是在执行过程中会产生上面提到的错误。 只需删除第17行(ImgOcv = cv :: imread(“icone.png”,-1);)并且错误消失后,图像将通过ImgGtk.set(“icone.png”);显示。
有没有人听说过这种冲突?有人知道如何调试吗?
我正在使用gtkmm 3.0,并将opencv升级到2.4.5,但这并没有解决问题。 操作系统是Ubuntu 12.04。
感谢您提前。
非常感谢您提供这种非常明确的答案。 我在为自己的研究编程时使用控制台应用程序。但是现在我会将程序从控制台应用程序“移植”到GUI应用程序中,以便让我的同事们受益。他们习惯于用户友好的环境,而且我从经验中了解到,其中一些(其中大多数是真的)看起来非常可疑,需要三行命令的程序。 我会尝试第二个建议。 再次感谢。 – user2335023 2013-05-02 06:51:04
#1你仍然可以编写自己的图形用户界面,只是不使用OpenCV中包含的图形用户界面。 – ptomato 2013-05-03 07:41:42
** 2014年更新**(当问题是谷歌搜索时,这个问题排名很高;)):当我遇到这个问题时,我发现拉请求[2943](https://github.com/Itseez/opencv/pull/2943 )(2014年7月)转化为master从GTK相关的highgui模块中抽取了一些基本方法(例如'imread(...)'和'imwrite(...)')到新的独立视频和图像编解码器模块中。这意味着现在使用opencv和链接对GTK3 +来说更容易了(以前它是非常不切实际的):只是不包含highgui模块。例如,在cmake中:'find_package(OpenCV REQUIRED core imgproc imgcodecs)'。最好。 – Tom 2014-10-23 20:00:37