qt+opencv+matlab代码编译的dll+海康工业相机打包成软件脱离matlab以及其他环境的依赖

2023年9月7日 15:56 ry 253

最近做了个横向项目,基于非接触式掌纹掌静脉系统计算血氧和心率,对接的硬件是海康工业相机,根据官方提供的相机接口进行操作,然后matlab代码实现对掌纹掌静脉图像的ROI提取,还有心率和血氧的计算也是基于matlab环境开发的,而我的框架是基于c++的qt进行开发,因此想把matlab代码直接用c++的qt来重写,由于matlab代码3-4百行,全部用c++来复线难度巨大,时间消耗也很多,因此开始用mingw-64对matlab代码编译成dll,然后利用qt来进行调用,经过完整测试,发现确实可行,由于我们是甲方,交接系统需要配置很多环境,想matlab环境,以及opencv环境,还有qtcreator环境版本以及mingw64编译器的选择都会影响着项目的正常运行,使得十分不友好,而且不用的版本竟然也会导致错误,因此我想将整个项目打包成软件,这样就不会有这样的严重的环境依赖了,先看下我qt中pro文件中的matlab环境依赖,如图所示

由于利用mingw-64打包matlab代码成dll,会生成3个文件夹,比如我打包test.m文件后,以下是其对应的文件夹

有用的就是前2个文件夹,第一个文件夹会有一个叫做MyAppInstaller_web.exe的软件,运行这个软件会自动下载我们打包matlab代码为dll里面所需的环境,而不用我们直接全部下载matlab,大大得减少了负担。第二个带only的文件夹里面有用的是test.dll,test.h和test.lib这3个文件,这3个文件我都放在和pro文件同目录下的include文件夹(自己创建)中,因此我们先再创建一个文件夹matlab_include和microsoft文件夹,里面放入上图中框起来的部分和INCLUDEPATH和LIBS路径。就是先把自己的matlab环境要用到的所有文件复制到matlab_include中去,如图所示

放进去后,pro文件依赖需要改下,如图所示

再次构建,没问题的话紧接下一步,有问题的话记得排查下自己的路径是否对应。这里编译我们使用release模式构建,构建成功后release文件夹下面会有一个exe,这里我的名字是HAIKANG.exe,然后我们新建一个文件夹,把这个exe放入刚新建的文件夹,这里我的文件夹为myqt,进入myqt文件夹,然后按住shift邮件打开powshell窗口,输入如下命令

D:\qt\5.13.2\mingw73_64\bin\windeployqt.exe .\HAIKANG.exe

注意如果你qt项目用的是mingw-64位构建的话需要对应windeployqt.exe也是在mingw-64位的,要一一对应,不然会报错,23位的对应32位!,然后打包后,将include文件中的dll全部考入myqt文件夹中,由于我的是使用了海康工业相机,拷贝的dll有很多,需要下载MVS软件,里面自带了需要的dll文件,如图所示,我下载完MVS软件后拷贝里面的dll文件到myqt中,如图所示

然后就是opencv的dll,我的是libopencv_imgcodecs454.dll和libopencv_imgproc454.dll这2个,主要从你opencv编译后里面找即可无非后面的数字不同而已。以下是我打包后的文件

这样就打包好了,但是运行我们的HAIKANG.exe时需要先运行roisave.exe和test.exe,运行后会自动下载matlab所需的一小部分函数需要的环境几百兆左右,下载完后再次运行HAIKANG.exe即可,除此之外,我们可用把这些打包的文件可用发送给任何人,他们没有环境也可用运行(前提是先运行exe下载matlab一部分环境),十分方便,极大地减少了时间。也不用设置任何环境变量。

如果上述代码帮助您很多,可以打赏下以减少服务器的开支吗,万分感谢!

欢迎发表评论~

点击此处登录后即可评论


评论列表
2023年11月17日 14:34 ry: 回复
需要源码的可以私我,本人承接各种软件定制,数据采集,接口搭建,网站开发,环境配置的杂活,需要的可以联系我 qq:1449917271 微信:liuyoudyping


赣ICP备2021001574号-1

赣公网安备 36092402000079号