1. 开篇:为什么选择QT进行Dalsa线扫相机二次开发?
大家好,我是老张,在工业视觉领域摸爬滚打了十几年,和Dalsa、Basler这些品牌的相机没少打交道。今天想和大家聊聊一个很实际的问题:当你拿到一台Dalsa的线扫相机,官方只提供了MFC和命令行版本的Demo,但你的项目又必须用QT来做界面,该怎么办?这几乎是每个用QT做工业视觉开发的工程师都会遇到的“拦路虎”。
我最近就刚完成了一个项目,用QT给Dalsa的线扫相机做了一套完整的采集和实时拼接系统。说实话,这个过程踩了不少坑,从SDK环境配置的“水土不服”,到实时采集的卡顿,再到多帧图像拼接的算法优化,每一步都挺折腾。但最终跑通的那一刻,看着4096像素宽的高清线扫图像在QT界面里流畅滚动、实时拼接成一张大图,那种成就感还是很足的。
这篇文章,我就把自己从零开始搭建这套系统的实战经验,毫无保留地分享出来。我会假设你是一个有一定C++和QT基础,但对Dalsa SDK不太熟悉的开发者。咱们不扯那些虚的理论,直接上干货:环境怎么配、代码怎么写、坑怎么避、性能怎么调。我的目标是,你跟着这篇文章的步骤走,就能在自己的电脑上复现出一个可运行、可修改的QT程序,快速对接上你的Dalsa线扫相机,把实时图像采出来、拼起来。无论是用于布匹、薄膜的表面检测,还是钢板、玻璃的瑕疵识别,这套基础框架都能给你一个扎实的起点。
2. 环境准备:避开SDK与QT兼容性的“天坑”
万事开头难,环境配置是第一个,也是劝退最多人的环节。Dalsa的Sapera SDK功能强大,但和QT,尤其是新版本的编译器和QT套件,兼容性问题不少。我用的环境是:Sapera LT SDK 8.60,采集卡驱动xtium2,QT 5.12.12,编译器MSVC 2017 64bit。为什么强调这个组合?因为这是我实测下来最稳定的一对,用MSVC 2019或者MinGW,大概率会遭遇各种诡异的链接错误和运行时崩溃。
2.1 驱动与SDK安装的注意事项
首先,确保你的相机通过采集卡正确连接电脑,并安装了对应的采集卡驱动。然后安装Sapera LT SDK。安装路径默认在C:\Program Files\Teledyne DALSA\Sapera,建议不要改动,因为后续代码里很多默认路径都指向这里。安装完成后,一定要重启电脑,让驱动彻底生效。
接下来是关键一步:使用官方的 CamExpert 软件进行相机配置。打开CamExpert,如果能看到你的相机设备,说明驱动安装成功。在这里,你需要根据你的相机型号(比如我的是HL-FM灰度相机)和实际需求,设置好分辨率、行频、触发模式等参数。这里有个巨坑:官方文档或某些教程给的参数可能不适用你的具体硬件。比如我的相机实际最大行频是某个值,但按默认设置可能会报错。我的经验是,先保守设置,能稳定出图后再逐步调高参数。
参数设置好后,点击 Grab 按钮,拿个手电筒或手机闪光灯在相机线阵传感器前晃动。如果能看到明暗变化的线条,恭喜你,硬件和基础驱动通了。这时,务必点击菜单栏的 File -> Save As...,将当前配置保存为一个.ccf文件。这个文件至关重要!它记录了相机和采集卡的所有工作状态。我建议你把它保存到一个自己熟悉的、路径里没有中文和空格的目录下,比如D:\Dalsa_Config\MyCamera.ccf。记住这个路径,后面写代码要直接用。
2.2 QT项目配置与SDK库的引入
关掉CamExpert(必须关,否则会独占设备),打开QT Creator,新建一个QT Widgets Application项目。重点来了:如何把Sapera SDK引入到QT项目中。
不要被官方Demo里复杂的工程设置吓到。最粗暴但最有效的方法是,直接把SDK安装目录下的三个关键文件夹拷贝到你的QT项目目录里:
Classes:里面是Sapera的C++类封装源码。Include:所有的头文件。Lib:编译好的静态库或动态链接库文件,注意区分Win32和Win64。
然后,修改你的项目配置文件(.pro文件)。下面是我的.pro文件关键部分,你可以直接参考:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# 关键定义:指明是64位Windows环境
DEFINES += COR_WIN64
# 包含Sapera SDK的头文件路径
INCLUDEPATH += $$PWD/Include
INCLUDEPATH += $$PWD/Classes/Basic # Basic类是最常用的
# 链接Sapera SDK的库文件
win32: LIBS += -L$$PWD/Lib/Win64/ -lSapClassBasic
win32: LIBS += -L$$PWD/Lib/Win64/ -lcorapi
# 如果你的项目还用了其他库,比如OpenCV,也在这里添加
这里解释一下:-lSapClassBasic链接的是主要的功能类库,-lcorapi是底层通信库,两者缺一不可。COR_WIN64这个宏定义也必须加上,否则编译时会找不到正确的函数入口。配置好后,尝试编译一个空项目,如果不报链接错误,说明环境基本搭成了。如果报错“无法打开SapClassBasic.lib”,请检查Lib/Win64/路径下是否存在这个文件,以及QT Creator的构建套件是否选用了MSVC2017 64bit。
396


&spm=1001.2101.3001.11974&articleId=148921648&d=1&t=3&u=d345c97e53de44feaf17118561e3ef24)

被折叠的 条评论
为什么被折叠?



