1

我会在使用 Gtkmm 图形界面的程序中使用 OpenCV 库,但是当我尝试使用 cv::imread 打开图像时,执行期间出现错误消息:gtk-error ** Using gtk+ 2.x and 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) 或类似的东西。上面的代码编译和链接很好,但在执行过程中会产生上述错误。只需删除第 17 行 (ImgOcv= cv::imread("icone.png", -1);) 并且错误消失,图像由 ImgGtk.set("icone.png"); 显示。

有人听说过这种冲突吗?有人知道如何调试吗?

我正在使用 gtkmm 3.0 并将 opencv 升级到 2.4.5,但这并没有解决问题。操作系统是 Ubuntu 12.04。

提前谢谢你。

4

1 回答 1

1

OpenCV 使用 GTK 库的 2.0 版 API,它与您的主程序正在使用的 3.0 版 API 不兼容。具体来说,GTK 包含尝试检测它们何时被组合的代码,然后崩溃让您知道您不能这样做。

有三种可能的行动方案:

  • 不要使用 OpenCV 的 GUI 工具(最好,但我不知道是否可以只使用 OpenCV 的图像处理功能而不打开 GUI 库)
  • 将您的程序降级到 GTKmm 的 2.x 版本
  • 将 OpenCV 升级到 GTK 3.0(高度劳动密集型,尽管很多人可能会感谢您所做的所有工作。不过我并不真正推荐它。)
于 2013-04-30T14:56:49.683 回答