天天看点

Windows系统下qt开发融合pylon,opencv,opencascade 等库的工程qt版本选择opencv版本选择opencascade 版本选择pylon相机库Note:总结

关键词:win10,qt,opencv,opencascade,pylon,编译

本文主要内容:如何选择版本,以使pylon,opencv,opencascade等库能协同工作。opencv的编译,opencascade 的编译。以及链接到的以前再Ubuntu系统中用qt做的相关内容。本文涉及到的部分代码不便流传,在此就不展示了,毕竟授人以鱼不如授人以渔。

qt版本选择

qt选择32位的版本:qt-opensource-windows-x86-msvc2015-5.7.1.exe ,这样编写的程序才能调用32位的库。不然会出现“error: LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突”笔者电脑上32位和64位的都安装了,最终测试结果是32位比64位好用。

opencv版本选择

opencv 2.4.10 解压缩的编译好的版本只有vc10到vc12,自己编译32位的vc14版本。只有32位的vc14版本能用。64位的版本不能调试,提示the cdb process terminated错误。 32位的版本试过vc10和vc12,能编译通过,在运行时某些函数会抛出异常,目前发现的是解PnP和找轮廓这两个函数。

也试着使用过opencv的3.4.0版本,编译后的64位版本编译通过但是不能调试,32位版本会有“无法解析的外部符号”,因为在这些外部符号中有“cuda”字样,所以怀疑是在编译的时候默认勾选了带CUDA的选项,编译qt版本是一定要勾选WITH_QT和WITH_OPENGL选项。关于cuda的问题,没有继续测试,但理论上来说,只要不使用cuda选项,编译出的32位的vc14版本应该能用。

opencv编译方法

opencv下载的编译好的自解压包有时不一定有我们需要的版本,需要自己进行编译。可以参考这个http://blog.csdn.net/donglany/article/details/53736729,笔者在编译时使用的cmake版本是3.3.2。

Windows系统下qt开发融合pylon,opencv,opencascade 等库的工程qt版本选择opencv版本选择opencascade 版本选择pylon相机库Note:总结

opencascade 版本选择

opencascade 7.2.0 下载的是源码,目前在用的是自己编译的32位的vc14版本。关于这个版本选择,笔者也曾测试多次,最终发现类似于opencv,64位的版本,不管是vc10还是vc14,都不能调试,提示the cdb process terminated错误。32位的vc10版本,会出现“无法解析的外部符号”(库都添加好了),官方提供的例子也提示“无法解析的外部符号”。最后测试发现只有32位的vc14版本可以使用。

opencascade 的编译

先在官网

https://www.opencascade.com/content/latest-release

下载最新版本。

Windows系统下qt开发融合pylon,opencv,opencascade 等库的工程qt版本选择opencv版本选择opencascade 版本选择pylon相机库Note:总结

然后下载对应vs版本和位数的第三方库

https://www.opencascade.com/content/3rd-party-components

解压第三方库,并放到指定位置。

如果不知道解压缩后的库放到哪儿,可以下载windows安装版,安装完成后看看安装目录下的文件结构就知道解压缩后的库文件放哪儿了。

Windows系统下qt开发融合pylon,opencv,opencascade 等库的工程qt版本选择opencv版本选择opencascade 版本选择pylon相机库Note:总结

然后需要修改custom.bat这个文件,用文字编辑软件打开,修改编译平台,位数,使能模块,各个使能模块路径设置等。

然后运行msvc.bat打开vs工程。按照这个博客中提供的顺序进行编译:

http://www.cppblog.com/eryar/archive/2012/08/13/187100.html

pylon相机库

官方提供的最新5.0.11版本是32位和64位的vc12版本。根据以上opencv 和opencascade 的测试结果来看,需要vc14版本。但是在实际使用时,32位的vc12版本也可以在目前配置好的环境中使用。关于pylon相机的驱动和库等文件下载,可以参考笔者写的另一篇介绍pylon相机在Ubuntu系统下使用的博客,https://blog.csdn.net/iamqianrenzhan/article/details/79413123。

Note:

在同一个工程中使用这些库的时候,库代码中的宏定义之类的很容易冲突,印象最深的有一个是不能使用using namespace cv;,需要在每个类型和函数前加cv::。还有一些冲突,需要注意把库中的h文件包含到

cpp文件。

笔者程序中除了这几个模块,还有串口,TCP,XML文件等模块,但这都是与qt平台直接提供的模块,整合到一起比较容易。这个项目原来曾经用MFC实现过一部分功能,但是笔者认为MFC是一个过于老旧的界面开发平台,而且QT的信号槽机制又大大简化了编程,比MFC更加方便,于是从头学QT,并把原来MFC的功能移植过来。

总结

最终,经过大量测试,终于把opencv opencascade pylon在qt平台下配置到了一起。由于qt的跨平台特性,目前还希望把这套东西在Ubuntu系统下也能编译通过。目前除opencascade 外都已经实现,可以参考笔者的另一篇文章https://blog.csdn.net/iamqianrenzhan/article/details/79413123。