本文详细讲述如何将OpenCV包含的函数创建成LabVIEW可调用的且具有NI Vision图像数据接口的动态链接库程序。
LabVIEW调用OpenCV函数的方法网络上可以找到很多,通常是编写动态链接库(.dll)供LabVIEW进行调用,这种方式在LabVIEW真正使用时给编程人员带来很多麻烦,比如,NI Vision的图像数据需要转换为指针或数组后才能传递给编译好的dll进行数据交互,而且编写的dll如果不够规范或没有异常数据处理功能,那么两者间的图像数据传递很难完成,频繁的报错会让系统崩溃,繁琐的转换会拖慢程序的运行速度。本文虽然也采用创建动态链接库的方法,但不同的是,该方法所生成的dll具有IMAQ Image类的句柄,便于图像数据的传递,增强调用库函数的稳定性,提高程序代码的简洁程度。
操作步骤
注:本文以VS2017 + OpenCV4.3.0 + LabVIEW2018(64bit)为例,详细讲述安装过程,如在安装过程中有错误请上网查阅相关资料进行修改调试。需要注意的是,OpenCV后期版本已经不支持32位库,所以需要使用64位LabVIEW进行调用。若一定使用32位LabVIEW,可参照此篇教学,配置前期支持32位版本的OpenCV环境。
1、安装VS2017(推荐使用社区版)
VS下载地址:https://my.visualstudio.com/Downloads?q=Visual Studio 2017
安装后重启计算机
2、安装并配置OpenCV4.3.0环境
OpenCV下载地址:https://opencv.org/releases/
(下载解压后将文件夹放在一个固定位置,本文放在D盘)
添加OpenCV环境变量
新建项目
新建属性表
配置属性表(一)
配置属性表(二)
3、VS2017中配置NIVision OpenCV Utilities工具包环境
添加附加包含目录:$(NIVISION_OPENCV_PATH)\nivisionextlib\include
添加附加库目录:$(NIVISION_OPENCV_PATH)\nivisionextlib\$(Platform)\vc90\lib
添加附加依赖项:nivisext.lib
4、安装NIVision OpenCV Utilities工具包
以管理员身份打开VI Package Manager,选择64位LabVIEW,搜索opencv,安装NIVision OpenCV Utilities,安装完成后重启计算机。
若不想在线安装,也可以下载该工具包,手动安装,但是依然要先以管理员身份打开VI Package Manager。
链接:https://pan.baidu.com/s/12e_y-w-ntzlgHuwyIlu_og
提取码:7kbo
5、制作OpenCV函数动态链接库(.dll)
打开之前建立的C++项目,新建程序文件
写入代码
生成动态库(.dll)
在C++项目路径中找到生成的.dll文件
泊松融合(C++代码)实例:
链接:https://pan.baidu.com/s/1Qnn4XOP0rhd6z6LyWNYBKA
提取码:chwj
6、LabVIEW调用函数动态链接库(.dll)
LabVIEW 64位中建立动态链接库函数
配置动态链接库函数
测试效果
泊松融合(LabVIEW代码)实例:
链接:https://pan.baidu.com/s/1xYF1MMS-s12N1RZenZtW1w
提取码:5yxw
NIVision OpenCV Utilities工具包是NI官方制作的,除了NI论坛里有几个人探讨该工具包,很少有人去真正的研究它、使用它。在这里也不妨看出官方的良苦用心,安装该工具包后,可以在安装路径下找到程序例程C++源码,我们可以参照这些代码去编写自己的动态链接库程序。
NIVision OpenCV Utilities工具包中自带的OpenCV函数C++代码例程
安装后若找不到官方例程可直接下载:
链接:https://pan.baidu.com/s/1nJZuzBdbavqzVlqtUwbhtw
提取码:g4w6
官方例程唯一的缺点是没有去教大家如何配置环境、如何生成动态链接库,C++代码中各类图像数据格式的定义和匹配也没有过多的介绍,这需要同时掌握OpenCV和NI Vision的工程师才能看懂和使用。
后续我会为大家详细解析例程中的C++源码,介绍一些OpenCV的编写技巧。使大家可以编写自己需要的OpenCV函数动态链接库程序,敬请期待!