使用QT开发一些特殊相机的思路:个人经验

前言:

去年使用QT开发过Dalsa线扫相机的应用程序,去获取数据,显示图片,实时分析等,测试demo的链接如下:

Dalsa线扫相机-二次开发-QT-C++ 可用Demo(一)_dalsa开发-CSDN博客

前段时间,同事需要开发BitFlow相机的软件,他搞了一段时间没搞出来,请我帮忙看看,花了一个多小时一起看SDK资料,分析出了设计思路,过了几天以后他果然按照那样的思路快速开发出了软件。于是意识到,对于一些之前从没接触过的相机应用开发,思路还是很重要的,于是打算记一下:

思路

首先,一定是不能害怕。不要因为没有接触过就未开始尝试就放弃,当初开发Dalsa线扫相机,我是第一次接触,包括同事的那个BitFlow相机,底层好像都是cameralink协议吧,反正我也没接触过,但是最终还是能够快速找到思路去解决,甚至我没接触过就敢帮同事看,说明信心很重要。

第二,搜集资料。很多时候开发QT应用程序,基本上我们做的不需要太底层,而且如果是较为成熟的相机厂商,基本上都有相关的SDK和例子,只不过不是QT的例子罢了。所以找到相关的例子和资料是个关键,特别是其他框架的源码,比如很多厂商之前的demo大多是SDL或者MFC的,但好在都是C++,那么程序就可以参考。

第三,运行官方例子,找到较为简单的例子和源码。比如Dalsa相机的SDK里面,会有一个/Sapera/Examples文件夹,里面的都是命令行相关的源码,我们找到比较简单的demo源码。同样,BitFlow里面,在examples文件夹里面,也有一个CiSimple的文件夹,里面是一个简单的显示视频的例子:CiSimpleCallBack.c。

第四,阅读那个简单例子的源码,找到获取图片数据的api代码。一般来说,会有注释,实在没有注释,又没有资料和他人帮助,只能慢慢分析了。看源码的时候,首先没必要逐行的看,先看整个框架的实现,以及大概的流程,找到获取数据去显示的部分代码。 当前前面的那些初始化,查找设备等代码,其实都是以后可以照抄或者封装的。至于获取数据,大多数,要么通过回调函数,要么通过while循环,所以我们就可以优先去看看回调函数或者搜一下while循环,看里面是否有获取图片数据的api代码。一般数据会用BYTE*或者char*的数组保存起来。同时,找到获取图像宽和高的代码,如果没有的话,就提前预设一下。

第五,在QT项目中测试。此处可能配置环境会比较麻烦,慢慢来就行。仿照官方例子,一样的头文件,一样的初始化,一样的查找设备,一样的while循环,只不过我们需要将显示的代码使用QT的Qimage来实现。以下以Dalsa相机为例:

比如获取数据的接口函数是 m_Buffers->GetAddress((void**)&pData); 此处这个pData其实就是存储数据的数组的地址,那么我们定义一个QImage *image; 使用:

image = new QImage(1920*1080,QImage::Format_Grayscale8);

memcpy(image->bits(), pData, 1920*1080);

这样,就可以将数据放如image,然后后面我们就知道如何显示和处理了。这里注意,因为线扫描相机是灰度图,所以我才是Format_Grayscale8, 如果是有颜色的可能就需要Format_RGB888等参数了,并且1920*1080*3 ;

最后,按照我们的逻辑,正常显示或者处理程序即可。

相关推荐
云空26 分钟前
《VSCode、QT 与 MarsCode:强大的开发组合》
ide·人工智能·vscode·qt·aigc·ai编程
优雅的小武先生40 分钟前
【Qt】报错error: undefined reference to `vtable for的最简单解决
开发语言·qt
only-lucky41 分钟前
QT之QML从入门到精通(第七章)
java·数据库·qt
郑同学的笔记41 分钟前
【Qt教程03】Qt中的信号和槽
开发语言·c++·qt
姆路42 分钟前
Qt中实现旋转动画效果
c++·qt
姆路43 分钟前
QT中使用图表之QChart绘制饼图
c++·qt
SuhyOvO1 小时前
Qt 的 QThread:多线程编程的基础
qt·多线程·qthread
Bruce小鬼1 小时前
QT基本绘图
开发语言·qt·命令模式
界面开发小八哥1 小时前
「Qt Widget中文示例指南」如何创建一个窗口标志?(二)
c++·qt·界面控件·用户界面
dtuling1 小时前
[Qt platform plugin问题] Could not load the Qt platform plugin “xcb“
linux·qt