我將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