Gtk-WARNING **: gtk_disable_setlocale() 必须在 gtk_init() 之前调用

Posted

技术标签:

【中文标题】Gtk-WARNING **: gtk_disable_setlocale() 必须在 gtk_init() 之前调用【英文标题】:Gtk-WARNING **: gtk_disable_setlocale() must be called before gtk_init() 【发布时间】:2013-04-25 12:41:17 【问题描述】:

每当我将 OpenCV 的 cv::imshow 与 Qt 的 QApplication 一起使用时,我都会收到此错误:

Gtk-WARNING **: gtk_disable_setlocale() must be called before gtk_init()

我进行了一些搜索,最终阅读了越来越多关于我不完全理解的内容,但对 OpenCV 和 GTK+ 的连接方式有所了解。而且由于警告显然是在某事之前调用某事的指令,因此我包括了gtk.h 并调用了gtk_disable_setlocale(),但最终出现了更多错误。

尽管有警告,但我的代码运行没有任何问题,但它真的让我很烦!我假设在警告背后,程序员应该理解一些基本的东西。所以也许有人可以用高级新手可以理解的方式解释整个事情? ;)

编辑: 我正在使用 ubuntu 12.10、OpenCV 2.4、GTK 2.24.13 和 qmake -v 告诉我

QMake version 2.01a 
Using Qt version 4.8.3 in /usr/lib/x86_64-linux-gnu

【问题讨论】:

你在 Linux 上运行吗?哪个发行版? 我可以确认 opencv/qt/gtk 之间的冲突在 Ubuntu 14.04 中仍然存在。如果您的程序的其他部分正在使用 qt,它似乎会破坏 imshow。 【参考方案1】:

如果你打算使用 Qt 窗口系统,最好避免在 Qt 窗口旁边创建 OpenCV 窗口。

IplImagecv::Mat 转换为QImage 并将其绘制在Qt 窗口上。 Check cvImage,一个简单的 Qt/OpenCV 示例,它在 Qt 窗口上显示加载了 OpenCV 的图像,并且还显示了基于鼠标坐标的像素的 RGB 值。

【讨论】:

我确实将cv::Mats 转换为QImages 以显示最终结果。只是cv::imshow() 派上用场了,当我需要查看一些中间结果时。我只是想了解警告的含义。 cv::imshow() 在你背后做了很多可能导致冲突的事情。我想真正理解它的唯一方法是调试应用程序,看看它会把你带到哪里。

以上是关于Gtk-WARNING **: gtk_disable_setlocale() 必须在 gtk_init() 之前调用的主要内容,如果未能解决你的问题,请参考以下文章

Gtk-WARNING **: gtk_disable_setlocale() 必须在 gtk_init() 之前调用

“Gtk-WARNING **:无法打开显示:”在 Eclipse 中运行 gtkmm 项目时

Gtk-WARNING **: C 库不支持区域设置。同时使用多个 Python 模块(mayavi、spectral)

Gtk-WARNING **: cannot open display: :0.0之解决

Java 应用程序抛出`Gtk-WARNING **: cannot open display:` 即使不需要 xserver

我该如何解决这个错误? Gtk-WARNING **: GModule ...初始化检查失败:GLib 版本太旧(微不匹配)