加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 教程 > 正文

Qt Creator中无法使用OpenCV2中新函数的解决措施

发布时间:2021-12-13 16:30:52 所属栏目:教程 来源:互联网
导读:在Qt Creator中配置了OpenCV2.4.X,但是只能使用opencv1.0的函数,opencv2中的函数,例如:imread(),Mat结构等都不能使用。 找原因: (1)看头文件有没有问题 将include和lib目录的配置由qmake.conf文件中改到工程中的pro文件中,以便于修改。 这里说明一下

 
在Qt Creator中配置了OpenCV2.4.X,但是只能使用opencv1.0的函数,opencv2中的函数,例如:imread(),Mat结构等都不能使用。
 
找原因:
 
(1)看头文件有没有问题
 
将include和lib目录的配置由qmake.conf文件中改到工程中的pro文件中,以便于修改。
 
这里说明一下,如果在qmake.conf文件中配置include和lib文件目录,则#include后面的opencv头文件会加下划线,说明IDE找不到这些头文件,而且写函数的时候没有自动补全。但是编译时没有错,因为构建的时候可以找到这些目录。如果在pro文件中配置include和lib文件目录,IDE就知道了这些目录,所以写函数的时候还有自动补全,更利于检查错误。
 
包含进opencv2的头文件
 
#include<opencv2/core/core.hpp>
 
#include<opencv2/highgui/highgui.hpp>
 
试了opencv2中的imread()函数,有自动补全提示,说明编译器已经找到了这些头文件。
 
但构建的时候会出现:
 
undefined reference to `cv::imread(std::string const&, int)' 等
 
说明编译器找不到lib库文件
 
(3)找lib库文件的问题
 
lib文件的包含如下:
 
LIBS += C:opencvbuildx86vc10libopencv_core243d.lib
 
      C:opencvbuildx86vc10libopencv_highgui243d.lib
 
      C:opencvbuildx86vc10libopencv_imgproc243d.lib
 
按说没有问题,网上也都是这样配的,但是我这里就一直有问题。
 
情况是这样的:
 
①不加这些lib文件,当然opencv1和opencv2的函数都不能用,都说undefined reference
 
②加上这些lib文件,opencv1中的函数能用,opencv2中新添加函数和结构不能用,例如:Mat结构,imread函数,VideoCapture结构等
 
这说明,opencv2新添加的函数和结构不在这些lib文件中。
 
后来,又新添加了几个lib文件:
 
C:opencvbuildx86mingwliblibopencv_core243.dll.a
 
C:opencvbuildx86mingwliblibopencv_highgui243.dll.a
 
C:opencvbuildx86mingwliblibopencv_imgproc243.dll.a
 
这次编译没问题了,说明这些lib文件里有opencv2新添加的东西。
 
(4)dll的问题
 
这时虽然编译没问题了,但运行的时候还是有问题(此时已经将对应的dll文件拷贝到system32文件夹下了),说程序异常终止,知道可能是缺dll文件。
 
进debug目录直接运行exe文件,按照提示缺少哪些文件去网上找,前两个都找到了,第三个是” libstdc++-6.dll”,找了好几个都说dll文件有错误。把MinGW目录下的这个dll文件复制过去也说是同样的错误。于是搜索错误信息,于是找到opencv中文网的下面一片文章,和我的错误一模一样:
 
====================================================
 
新手求助,_ZNSt9exceptionD2Ev错误
 
 
 
我是OpenCV的新手···我用OpenCV2.4最新版本结合CodeBlock配置的环境。并使用Opencv带的样例测试。编译通过了,但是一运行就会报错:无法定位程序输入点_ZNSt9exceptionD2Ev于动态链接库libstdc++-6.dll上我不明白这是什么错误,请高手帮助····谢谢了
 
Re:新手求助,_ZNSt9exceptionD2Ev错误
我不清楚你用什么编译器来编译你自己写的opencv程序,以我的经验,你需要用一个4.6.x版本的mingw来链接官方的opencv2.4的库。因为官方opencv2.4的库是用mingw4.6.x版本编译的。
 
 
好谢谢现在我试试等下给你回复呵呵
 
 
我换了最新的版本MinGW,结果显示还是无法定位程序输入点_ZdlPv 于动态链接库libstdc++-6.dll
 
我前面都和你说了,不能用最新版的MinGW,只能用4.6.x版本的MinGW。
 
http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.6.3/32-bit/threads-win32/dwarf/x32-4.6.3-release-win32-dwarf-rev0.7z/download 用这个版本肯定可以。
 
===========================================
 
看了大神的恢复,知道了是MinGW的版本问题,又下载了一个MinGW,把libstdc++-6.dll文件拷过去,果然OK了。现在可以用OpenCV2中的函数了。
 
 
 
总结一下:
 
(1)下载的OpenCV2.4.X版本,已经编译好的lib文件中,只有C:opencvbuildx86mingwlib
 
这个目录下的lib文件有opencv2的新函数,而C:opencvbuildx86vc10lib这个目录下的lib文件中没有opencv2的新函数,所以一开始包含这个目录下的lib文件会找不到新函数的实现。
 
(2)另一种使用opencv2的方法就是用cmake自己编译生成dll和lib文件,这样里面就有了新的函数。不过比较麻烦。

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读