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

按上篇文章《Qt4.8下应用OpenCV2.4.4搭建环境详细步骤(win7系统)》

http://blog.csdn.net/masikkk/article/details/8693793

在Qt Creator中配置了OpenCV2.4.X,但是只能使用opencv1.0的函数,opencv2中的函数,例如:imread(),Mat结构等都不能使用。

找原因:

(1)看头文件有没有问题

将include和lib目录的配置由qmake.conf文件中改到工程中的pro文件中,以便于修改。我这里的头文件目录是:

INCLUDEPATH +=  C:\OpenCV2.4.4\opencv\build\include\
                C:\OpenCV2.4.4\opencv\build\include\opencv\
                C:\OpenCV2.4.4\opencv\build\include\opencv2

这里说明一下,如果在qmake.conf文件中配置include和lib文件目录,则#include后面的opencv头文件会加下划线,说明IDE找不到这些头文件,而且写函数的时候没有自动补全。但是编译时没有错,因为构建的时候可以找到这些目录。如果在pro文件中配置include和lib文件目录,IDE就知道了这些目录,所以写函数的时候还有自动补全,更利于检查错误。

包含进opencv2的头文件

#include<opencv2/core/core.hpp>

#include<opencv2/highgui/highgui.hpp>

试了opencv2中的imread()函数,有自动补全提示,说明编译器已经找到了这些头文件。

注:如果没有函数的自动补全提示,先检查下是否声明了OpenCV中的cv命名空间,opencv2中的这些函数和变量都在cv命名空间中,如下:

 //OpenCV命名空间
 using namespace cv;

但构建的时候会出现:

undefined reference to `cv::imread(std::string const&, int)' 等

说明编译器找不到lib库文件


(2)找lib库文件的问题

我这里lib文件的包含如下:

LIBS += C:\opencv\build\x86\vc10\lib\opencv_core243d.lib\

       C:\opencv\build\x86\vc10\lib\opencv_highgui243d.lib\

       C:\opencv\build\x86\vc10\lib\opencv_imgproc243d.lib\

按说没有问题,网上也都是这样配的,但是我这里就一直有问题。

情况是这样的:

①不加这些lib文件,当然opencv1和opencv2的函数都不能用,都说undefined reference

②加上这些lib文件,opencv1中的函数能用,opencv2中新添加函数和结构不能用,例如:Mat结构,imread函数,VideoCapture结构等

这说明,opencv2新添加的函数和结构不在这些lib文件中。

后来,又新添加了几个lib文件:

C:\opencv\build\x86\mingw\lib\libopencv_core243.dll.a\

C:\opencv\build\x86\mingw\lib\libopencv_highgui243.dll.a\

C:\opencv\build\x86\mingw\lib\libopencv_imgproc243.dll.a

这次编译没问题了,说明这些lib文件里有opencv2新添加的东西。


(3)dll的问题

这时虽然编译没问题了,但运行的时候还是有问题(此时已经将对应的dll文件拷贝到system32文件夹下了),说程序异常终止,知道可能是缺dll文件。

进debug目录直接运行exe文件,按照提示缺少哪些文件去网上找,前两个都找到了,第三个是” libstdc++-6.dll”,找了好几个都说dll文件本身有错误。把MinGW目录下的这个dll文件复制过去也说是同样的错误。于是搜索错误信息,于是找到opencv中文网的下面一片文章,和我的错误一模一样:

http://www.opencv.org.cn/forum/viewtopic.php?t=23817

 ============================================================================================

新手求助,_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:\opencv\build\x86\mingw\lib

这个目录下的lib文件有opencv2的新函数,而C:\opencv\build\x86\vc10\lib这个目录下的lib文件中没有opencv2的新函数,所以一开始包含这个目录下的lib文件会找不到新函数的实现。

(2)另一种使用opencv2的方法就是用cmake自己编译生成dll和lib文件,这样里面就有了新的函数。不过比较麻烦。

你可能感兴趣的:(Qt Creator中无法使用OpenCV2中新函数的解决办法)