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

news/2024/9/18 22:12:04/ 标签: qt, c++

前言:

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

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


http://www.ppmy.cn/news/1520242.html

相关文章

基于Java+SpringBoot+Vue+MySQL的在线装修管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的在线装修管理系统【附源码文档】、前后…

解决Springboot项目Maven下载依赖速度慢的问题

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

数学建模笔记

1.三级表的制作 打开word找到插入并点击表格 随机生成一个表格,然后去修改表格样式,把格式应用于选到标题行,然后点击格式,选到边框和底纹,把宽度改为1.5磅,然后点击上下俩个田字,预览图会出现…

RabbitMQ中间件监控指标解读

监控易是一款全面的IT监控软件,能够实时监控各种IT资源和应用,确保系统的稳定运行。在RabbitMQ中间件的监控方面,监控易提供了详尽的监测指标,帮助用户深入了解RabbitMQ集群的运行状态和性能表现。 一、集群监控(sdds…

飞思相机存储卡格式化数据如何恢复?提供全面指南

在数字摄影时代,‌飞思相机以其卓越的成像质量和专业的性能,‌赢得了众多摄影师的青睐。‌然而,‌即使是专业的设备也难免遭遇数据丢失的困境,‌尤其是当存储卡不幸被格式化时。‌面对这一突如其来的灾难,‌许多摄影师…

thinkphp8 定时任务 addArgument

在ThinkPHP8中,我们可以使用addArgument方法来添加命令行参数。这个方法允许我们定义命令行参数,并且可以指定参数的模式(例如:是否必须,是否可选)。 以下是一个简单的例子,演示如何在ThinkPHP…

SAP2 - 系统管理课程 System Administration Course

资料来源 -- SAP System Administration SAP System Administration SAP Systems Administrators are responsible for maintaining the ongoing reliability, performance, management, and support of SAP application environments supporting education, research, admini…

9月1日起,这些知识产权新规正式实施

9月1日起,一批知识产权新规将正式实施!一起来看,哪些与你相关? 9月1日起!《高价值发明专利培育工作指南》《专利申请预审规范》地方标准实施 日前,贵阳市市场监督管理局批准发布《高价值发明专利培育工作指…

Apache + Tomcat + ajp 协议配置

前端 web 服务器使用 apache 的好处就不在赘述,这里重点讲一下如何使用 ajp 协议和 http 协议与后端 tomcat 服务器通信的区别。 apache作为代理服务器可以使用 http 协议与后端 tomcat 服务器进行通信,也可以使用 ajp 协议与 tomcat 通信。两者的主要区…

linux --- CentOS 7 环境下编译安装OpenCV For Java

linux环境下编译安装OpenCV For Java(CentOS 7) 1、基础环境安装 在这里插入代码片# 安装 SCL 源 yum install -y centos-release-scl # 安装 gcc8 g++8 yum install -y devtoolset-8-gcc*#设置环境变量 echo source /opt/rh/devtoolset-8/enable >> /etc/profile#使环…

产品概述Tektronix泰克TCP0030A电流探头TCP0030原装二手

产品概述 Tekronix TCP0030 AC/DC 电流探头是一款高性能且易于使用的探头,它通过可选测量范围增强了带宽,同时还提供了低电流测量能力和精度。Tektronix TCP0030 探头专为具有 TekVPI 探头接口的示波器而设计。 Tektronix TCP0030 AC/DC 电流探头的功能…

哲学家进餐问题

哲学家进餐问题(The Dining Philosophers Problem)是计算机科学中的经典同步问题,由荷兰计算机科学家埃德斯赫伯戴克斯特拉(Edsger Dijkstra)提出。该问题用来说明如何避免死锁(deadlock)和资源…

[学术论文] KBS期刊介绍及投稿流程学习笔记

该专栏主要是论文投稿的记录笔记,希望对初学者有所帮助,也希望大家论文都能命中。这篇文章主要介绍人工智能一区期刊Knowledge-Based Systems的投稿笔记,希望您喜欢! 文章目录 一.期刊介绍二.投稿地址及模板1.投稿地址2.LaTex下载…

c++命令模式

一.概念 命令模式(Command Pattern)是一种行为设计模式,它将请求封装为对象,从而使您可以使用不同的请求、队列或日志请求,以及支持可撤销操作。命令模式的主要组成部分包括: 命令接口(Comman…

【DEV工具-IDEA】idea的光标变成黑块了?

项目场景: 解决:windows:按一下insert键。

详细解说:ansible自动化运维项目

Ansible是一种强大的自动化运维工具,主要用于配置管理、应用部署、任务执行等场景。它基于Python开发,通过SSH协议进行通信,无需在目标主机上安装客户端或守护进程,使得部署和管理变得更加简单和安全。 Ansible的特点 简单易用&…

Maven <parent> 标签的作用及使用详解

在使用 Maven 进行项目构建时&#xff0c;<parent> 标签是一个非常重要的配置元素。它允许子模块继承父模块的配置&#xff0c;从而实现一致性和配置管理的简化。本文将详细介绍 <parent> 标签的主要作用&#xff0c;并通过示例来说明其使用方式和关键点。 <pa…

【蓝桥杯青少组】第十五届省赛python(2024)

选择题做得飞快。编程题被绊住了... 第四题 熟悉 等差数列求和公式即可&#xff0c;无需赘述 第五题 果然是贪心算法&#xff0c;之前强化训练了一天&#xff0c;看来效果还是不够。 题目简述 浇水 n棵植物编号i1-n&#xff0c;所需浇水w[i] 每次连续浇L棵&#xff0c;每棵1份…

C#桌面开发之巅:Windows Forms与WPF深度解析

标题&#xff1a;C#桌面开发之巅&#xff1a;Windows Forms与WPF深度解析 摘要 C#作为.NET框架的核心语言之一&#xff0c;提供了强大的桌面应用程序开发能力。Windows Forms和WPF&#xff08;Windows Presentation Foundation&#xff09;是两个主要的UI框架&#xff0c;用于…

安装包丨WebGIS开发环境搭建及所需工具

以下工具为GIS开发中所涉及到的工具&#xff0c;当然如果您已经非常精通web前端领域&#xff0c;并有其他习惯的工具也可以忽略~ 1.开发工具: Node安装 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境Node.js 使用了一个事件驱动、非阻塞式 I/0 的模型&#xff0c;使…