我会使用Gtkmm图形界面将OpenCV库用于程序,但是当我尝试使用cv :: imread打开图像时,执行期间会出现错误消息:gtk-error **使用gtk + 2.x不支持在同一进程中使用gtk + 3.
这是一个非常简单的示例代码:
#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)或类似的东西。 上面的代码编译和链接很好,但在exceution期间产生上面提到的错误。 只需删除第17行(ImgOcv = cv :: imread(“icone.png”, - 1);)并且错误消失,图像由ImgGtk.set(“icone.png”)显示;。
有没有人听说过这种冲突?有人知道如何调试吗?
我使用gtkmm 3.0并将opencv升级到2.4.5,但这并没有解决问题。 操作系统是Ubuntu 12.04。
提前感谢你。
答案 0 :(得分:1)
OpenCV使用GTK库的2.0版API,它与主程序使用的3.0版API不兼容。具体来说,GTK包含的代码试图检测它们何时被组合,然后崩溃以告知您不能这样做。
有三种可能的行动方案: