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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSocket通信学习笔记

1 简介 WebSocket是一种全双工通信协议,它允许客户端和服务器之间建立持久化的双向连接,从而在不频繁创建HTTP请求的情况下进行实时数据传输。与传统的HTTP协议相比,WebSocket更适合需要实时数据更新的应用场景,如聊天应用、实时…

IDEA没有SQL语句提示

解决已经在IDEA连接数据库,但是写SQL语句不会提示列名、属性之类的 Mapper 映射没有 SQL 提示 设置中搜索,把方言改成 MySQL SQL Dialects

VSCode手动创建SpringBoot项目的方法,及详细步骤

不废话,直接来吧!这里以Windows系统、Maven项目构建和管理工具为例。 VSCode手动创建SpringBoot项目之前,首先需要先下载Maven。 Maven安装及环境变量配置 Maven包下载地址: https://maven.apache.org/download.cgi 可以下载…

群晖(Docker Compose)配置 frp 服务

为了方便远程电脑,访问自己电脑上的ComfyUI等服务,配置了 frp 服务。 配置 frp 服务后,发现群晖中的一些服务也可以 stcp 安全的暴露出来。 直接在群晖通过 Docker Compose 方式部署 frps 和 frpc,访问者通过 frpc 安全访问暴露…

移位操作存储多个布尔值或标志位

基本概念 位表示&#xff1a; 整数的每一位&#xff08;bit&#xff09;可以表示一个布尔值或标志位&#xff0c;通常是 0 或 1。 移位操作&#xff1a; 左移&#xff08;<<&#xff09;&#xff1a;将整数的位向左移动&#xff0c;腾出右侧位的位置。右移&#xff08;&g…

【机器学习】支持向量机(SVM)的对偶性、核方法以及核技巧

引言 在SVM中&#xff0c;通过引入拉格朗日乘子&#xff0c;可以将原始问题转化为对偶问题&#xff0c;这种转换具有几个重要的优点&#xff0c;包括简化计算和提供更直观的优化问题的解释 文章目录 引言一、支持向量机&#xff08;SVM&#xff09;的对偶性1.1 原始问题&#x…

pacs图像打不开怎么办 --日常工作总结

先强调一下,我不是专门做图像入库和图像归档,我负责的是临床这边的影像,下面是占在我的业务日常分析总结的哈,(不太专业,勿喷) 我们经常会遇到在打开某个检查的时候,出现黑框,日志定位wado服务取不到图 这种情况一般分为 (1) 工作站,工作组,路由,存储卷配置缺失 ---对应的wad…

java03

目录 一、Java 流(Stream)、文件(File)和IO java流&#xff08;Stream&#xff09; java文件操作 java io 二、java Scanner类 next()和nextline&#xff08;&#xff09;区别&#xff1a; 三、java异常处理 常见异常类型 throw/throws关键字 final异常&#xff1a; …

如何更改 Mac 上 Java 的默认版本?

优质博文&#xff1a;IT-BLOG-CN 第一次运行/usr/libexec/java_home -V将输出类似以下内容&#xff1a; Matching Java Virtual Machines (3): 1.8.0_05, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home 1.6.0_65-b14-4…

安装JKS格式证书

--千金易得 知己难求 本文介绍如何在Tomcat服务器配置JKS格式的SSL证书&#xff0c;具体包括下载和上传证书文件&#xff0c;在Tomcat上配置证书文件和证书密码等参数&#xff0c;以及安装证书后结果的验证。成功配置SSL证书后&#xff0c;您将能够通过HTTPS加密通道安全访问To…

音频检测电路 | 声音传感器模块 | 口哨开关 | Arduino

音频检测电路 | 声音传感器模块 | 口哨开关 | Arduino 案例分析电路设计1. **基本音频检测电路设计**电路结构:2. **灵敏度调节原理**方法:3. **非 MCU 控制的 LED 触发**设计步骤:4. **电路示例**5. **示意图(文本描述)**总结实验方法案例分析 一个硅胶娃娃,挤压或拍打…

Docker原理及实例

目录 一 Docker简介及部署方法 1.1 Docker简介 1.1.1 什么是docker&#xff1f; 1.1.2 docker在企业中的应用场景 1.1.3 docker与虚拟化的对比 1.1.4 docker的优势 2 部署docker 2.1 容器工作方法 2.2 部署第一个容器 2.2.1 配置软件仓库 2.2.2 安装docker-ce并启动服…

大模型LLM的Token相关问题:模型不同,token计算不同,gpt对token的计算,我们如何选择token及token评估模型

大模型LLM的Token相关问题&#xff1a;模型不同&#xff0c;token计算不同&#xff0c;gpt对token的计算&#xff0c;如何选择token及token评估模型 一、gpt系列模型中 一个token是多少二、在不同的语言模型中&#xff0c;token的大小会有所不同吗&#xff1f;三、在构建语言模…

Power BI数据可视化:让数据跳舞的秘密武器

目录 1. 什么是Power BI? 2. 数据可视化的重要性 2.1 数据的“面子” 2.2 省时省力 3. 如何使用Power BI数据可视化? 3.1 数据导入 3.2 数据清洗 3.3 创建可视化 3.3.1 条形图和柱状图 3.3.2 饼图 3.3.3 线图 3.4 设计和美化 3.5 分享和发布 4. 常见问题排忧解…

【经验分享】CANOPEN协议驱动移植(基于CANfestival源码架构)

【经验分享】CANOPEN协议驱动移植(基于CANfestival源码架构&#xff09; 前言一、CANOPEN整体实现原理二、CANOPEN驱动收发三、Timer定时器四、Object Dictionary对象字典五、CANOPEN应用层接口六、CANOPEN 驱动移植经验总结 前言 本次CANOPEN移植基于CANfestival开源代码&…

Python实现Http Server及Https Server

目录 一、Python实现Http Server 1、实现Http Server 2、通过浏览器测试Http Server 3、通过Python实现客户端测试Http Server 二、Python实现Https Server 1、利用HTTPServer实现一个简单的Https Server 2、SSL生成证书及密码 一、Python实现Http Server 1、实现Http …

SpringBoot中MyBatis使用自定义TypeHandler

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Spring Boot Web开发实践:响应参数的使用方法、IOC、DI和Bean基本介绍

主要介绍了SpringBootWeb响应参数的基本使用和spring框架的控制反转&#xff08;IOC&#xff09;和依赖注入&#xff08;DI&#xff09;以及Bean对象的声明、扫描、注入&#xff01;&#xff01;&#xff01; 目录 前言 响应参数 分层解耦 三层架构 分层解耦 IOC & …

第15届蓝桥杯青少组Scratch初级组省赛真题试卷

第十五届蓝桥杯青少组省赛Scratch初级组真题试卷 题目总数&#xff1a;10 总分数&#xff1a;360 选择题 第 1 题 单选题 Scratch运行以下程序&#xff0c;角色会说( )? A.29 B.31 C.33 D.35 第 2 题 单选题 scratch运行下列哪个程序后&#xff0c;宇航…

前端window.blur() 和 window.focus() 防止切屏的基本知识

目录 前言1. 基本知识2. Demo3. 切屏失效 前言 在前端开发中&#xff0c;防止用户切屏&#xff08;即切换到其他浏览器标签或窗口&#xff09;通常可以使用 window.blur() 和 window.focus() 方法来实现 由于以下知识点比较简单&#xff0c;对此不长篇大论的概述 1. 基本知识…