OpenCV 2.3 和 Qt 4.3.7

Posted

技术标签:

【中文标题】OpenCV 2.3 和 Qt 4.3.7【英文标题】:OpenCV 2.3 with Qt 4.3.7 【发布时间】:2011-08-02 12:45:48 【问题描述】:

我已经成功构建并运行了启用 Qt 的 Qt 4.3.7 和 OpenCV 2.3。当我使用以下方式启动窗口时:

cvNamedWindow( "video", 0 );

我成功加载了一个完整的Qt界面!太棒了:)

但是!!当我使用命令时

void callbackButton(int state, void* userdata)
int x;
x=3;


cvCreateButton(nameb2,callbackButton,nameb2,CV_CHECKBOX,0);

我收到错误消息

error LNK2001: unresolved external symbol _cvCreateButton

我不明白 Qt 界面上已经有很多按钮了?有人可以解释一下我在可能导致这种情况的包含中缺少什么吗?

谢谢!

【问题讨论】:

【参考方案1】:

你使用了错误的参数来调用 cvCreateButton。根据文档here,函数的签名是

cvCreateButton(const char* button_name CV_DEFAULT(NULL), CvButtonCallback on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(NULL), int button_type CV_DEFAULT(CV_PUSH_BUTTON), int initial_button_state CV_DEFAULT(0)

示例调用是:

cvCreateButton(NULL,callbackButton);
cvCreateButton("button2",callbackButton,NULL,CV_CHECKBOX,0);
cvCreateButton("button3",callbackButton,&value);
cvCreateButton("button5",callbackButton1,NULL,CV_RADIOBOX);
cvCreateButton("button6",callbackButton2,NULL,CV_PUSH_BUTTON,1);

并且回调函数的声明必须是:

CV_EXTERN_C_FUNCPTR( *CvButtonCallback)(int state, void* userdata));

你得到一个链接错误而不是编译器错误,因为 cvCreateButton 具有外部“C”链接 - 这意味着无法在编译时检查参数。

【讨论】:

【参考方案2】:

我通过调用函数 cv::createButton 而不是 cvCreateButton 解决了这个问题(如果我在 OpenCV2 中调用方法的方式正确的话)。

【讨论】:

【参考方案3】:

第三个参数必须是void*。改为:

cvCreateButton(nameb2,callbackButton,NULL,CV_CHECKBOX,0);

它会起作用的。

编辑

上面的语句出错了。 第三个需要的参数是“void *”——它与任何东西都兼容,因此 C 和 C++ 都不应该对你提供的内容有问题。您不能因此引发链接器错误。

编码可能引发链接器错误的唯一原因是当您在 C++ 中不使用原型(忘记使用头文件),然后 C++ 会自行创建一个不属于任何库的错位名称。在这种情况下,编译器会在编译时首先警告您缺少原型(对于 C 和 C++),然后链接器可能会引发错误(仅对于 c++)。

如果您没有看到来自编译器的原型警告,那么这不是您的问题。

【讨论】:

【参考方案4】:

这是一个链接错误。 尝试将 opencv .lib 文件(或多个文件)添加到项目库路径中。 这可能会有所帮助:VS2010 OpenCV。

编辑

优化问题:即使将任何 OpenCV 库添加到您的项目,链接也会失败。

原因:该符号通常根本不存在于库中。

解决方案:您必须更改一些设置并自行编译。

另见:openCV 2.2 createButton LNK 2019 error in Visual Studio 2010

【讨论】:

以上是关于OpenCV 2.3 和 Qt 4.3.7的主要内容,如果未能解决你的问题,请参考以下文章

调试断言失败(无符号)(c+1)<= 256(在 VideoCapture::open [Qt Creator] 中)

OpenCV 安装 VS 10 不会构建

在 open cv 中进行 videoCapture 后应用程序没有响应

使用 QT 和 OpenCV 时出错

Qt-OpenCV:如何在 Qt 中显示灰度图像(opencv)

Qt 和 opencv4android