在opencv2.4.5(Qt gui特性)中使用createButton segfault
Posted
技术标签:
【中文标题】在opencv2.4.5(Qt gui特性)中使用createButton segfault【英文标题】:Using createButton in opencv2.4.5 (Qt gui features) segfault 【发布时间】:2013-05-04 23:47:45 【问题描述】:我实际上在使用以下 OpenCV 示例时遇到了问题:
http://docs.opencv.org/2.4.5/modules/highgui/doc/qt_new_functions.html
(我更新了我的环境的路径并添加了示例中没有的回调函数)。
我编译Opencv设置Qt On:
图形用户界面: -- QT 4.x:是(版本 4.8.2 = 开源) -- QT OpenGL 支持:否 -- OpenGL 支持:否当我尝试在 Qt 文档中找到的代码时:我有以下回溯:
(gdb) 回溯 #0 0x00007ffff14f53e8 in QAction::setEnabled(bool) () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4 #1 0x00007ffff67bf0db in GuiReceiver::enablePropertiesButtonEachWindow() () 来自 /usr/local/lib/libopencv_highgui.so.2.4 #2 0x00007ffff67c02db in GuiReceiver::addButton(QString, int, int, void*, void*) () from /usr/local/lib/libopencv_highgui.so.2.4 #3 0x00007ffff67c5e9a in GuiReceiver::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () from /usr/local/lib/libopencv_highgui.so.2.4 #4 0x00007ffff0fcef77 在 QMetaMethod::invoke(QObject*, Qt::ConnectionType, QGenericReturnArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument) const () 来自 /usr/lib/x86_64-linux-gnu/libQtCore.so.4 #5 0x00007ffff0fd134c 在 QMetaObject::invokeMethod(QObject*, char const*, Qt::ConnectionType, QGenericReturnArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument) () 来自 /usr/lib/x86_64-linux-gnu/libQtCore.so.4 #6 0x00007ffff67b23a7 in cvCreateButton() from /usr/local/lib/libopencv_highgui.so.2.4 #7 0x0000000000400f6c in main (argc=, argv=) at main.cpp:20有人有同样的问题吗? 我只是想明确一点,我不想在 Qt 中嵌入 Opencv,而只是使用 opencv 提供的 Qt 功能。
我在这里找到了答案的开始: How to use cv::createButton prototype in OpenCV
但这无关紧要……
感谢您的帮助。
还有一段代码有问题:
#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
void callbackButton(int state, void* userdata)
int main(int ac, char **av)
namedWindow("main1",CV_WINDOW_NORMAL);
namedWindow("main2",CV_WINDOW_AUTOSIZE | CV_GUI_NORMAL);
int a = 0;
createButton("test",callbackButton, &a, CV_CHECKBOX,1);
return 0;
【问题讨论】:
【参考方案1】:我无法确认也无法否认这个问题是真实存在的,因为我的机器上有不同的设置(OpenCV 2.4.9 和 Qt 5.0.2)。
但我发现使用CV_GUI_NORMAL
创建一个窗口会使应用程序崩溃。文档指出:
CV_GUI_NORMAL 或 CV_GUI_EXPANDED:CV_GUI_NORMAL 是绘制没有状态栏和工具栏的窗口的旧方法,而 CV_GUI_EXPANDED 是新的增强 GUI。
我建议你暂时用CV_GUI_EXPANDED
创建你的窗口。
【讨论】:
我已经试过 CV_GUI_EXPANDED 没有效果...谢谢你的建议。【参考方案2】:我也无法使用 OpenCV 2.4.5 / Qt 4.8.0 创建按钮。我下载了 OpenCV 2.4.9 并在相同的设置下安装它,现在它可以工作了。
【讨论】:
以上是关于在opencv2.4.5(Qt gui特性)中使用createButton segfault的主要内容,如果未能解决你的问题,请参考以下文章
opencv2.4.5中cvStereoGCState在哪个模块
将 QtCreator 2.7.0 与 OpenCV 2.4.5 一起使用