使用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 ;

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

相关推荐
2301_8079973811 小时前
代码随想录-day54
数据结构·c++·算法
curry____30312 小时前
study in pta + 豆包(求区间和)(前缀和算法)(如何处理zhan栈溢出和超出时间复杂度问题)(2025.12.2)
数据结构·c++·算法
BestOrNothing_201512 小时前
【C++基础】Day 6:前置++ VS 后置++(语法底层 + STL规范 + 面试高频)
c++·运算符重载·面试八股·前置++·后置++·stl迭代器
缘三水12 小时前
【C语言】10.操作符详解(下)
c语言·开发语言·c++·语法·基础定义
渡我白衣12 小时前
深入理解算法库的灵魂——彻底掌握 <algorithm> 的范式、迭代器约束、隐藏陷阱与性能真相
数据结构·c++·人工智能·网络协议·mysql·rpc·dubbo
报错小能手12 小时前
C++流类库 文件流操作
开发语言·c++
暗然而日章12 小时前
C++基础:Stanford CS106L学习笔记 3 流
c++·笔记·学习
獭.獭.12 小时前
C++ -- STL【list的使用】
c++·stl·list
开始了码12 小时前
Qt:: 事件过滤器实战:图片点击缩放交互实现(含 QMatrix 详解)
qt
Q741_14712 小时前
C++ 栈 模拟 1047. 删除字符串中的所有相邻重复项 题解 每日一题
c++·算法·leetcode·模拟·