gpt4 book ai didi

c++ - 如何解决 Opencv 和 GTKmm 之间的冲突?

转载 作者:太空宇宙 更新时间:2023-11-03 23:01:43 26 4
gpt4 key购买 nike

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

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

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

在此先感谢您。

最佳答案

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

共有三种可能的行动方案:

  • 不要使用 OpenCV 的 GUI 功能(最好,但我不知道是否可以在不打开 GUI 库的情况下仅使用 OpenCV 的图像处理功能)
  • 将您的程序降级为 GTKmm 的 2.x 版本
  • 将 OpenCV 升级到 GTK 3.0(高度劳动密集型,尽管很多人可能会感谢您所做的所有工作。不过我真的不推荐这样做。)

关于c++ - 如何解决 Opencv 和 GTKmm 之间的冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16295558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com