背景

我们在做图像处理时,都会对一些相机的SDK进行开发完成图像采集的操作,为后续图像处理做准备。本文主要的目的是降低图像采集的耗时,应用在一些高速检测的场景下。利用循环队列+内存复用的方式,去掉或者减少新建内存的时间。

线扫描相机

线扫描相机会将采集到的1-N行打包回工控机中,由SDK将这些行的数据拷贝到内部的循环队列中。

正常流程:

1)相机SDK给出完成回调

2)软件拷贝根据图像大小和通道数拷贝指针数据

3)图像处理。

该流程在2)的时候需要执行 new memory / copy memory的操作,我们现在的步骤就是需要简化掉这两步,有以下两种优化方案。

优化方案一

新建循环队列,每次只执行copy动作,耗时减少一半

1)相机SDK给出完成回调

2)循环队列获取当前图像

3)拷贝内存至当前图像上

4)循环队列移至下一张图像

5)图像处理

优化方案二

新建循环队列,将循环队列个数和指针直接设置进SDK中(这个需要相机厂家支持,SDK内部队列可以由用户设置),整体耗时为0ms

拿IKAP(埃科)的相机举例,设置SDK内部队列的方式如下:

 IKapBoardClassLibrary.IKapBoard.IKapSetBufferAddress(m_ptrBoard, ptrs.Count, ptr); //采集卡

1)相机SDK给出完成回调

2)直接根据相机给出的图像指针找到 循环队列中的图像

3)图像处理

4)只针对黑白图像,彩色图像还是执行新建吧,因为halcon的这个存储格式获取彩色图像指针时是三个指针,而相机SDK给出的指针一般是 RGBRGB这样的格式,去做这个拆包循环有点得不偿失了

注意事项

1)以上两种方式都需要用到循环队列,要注意一个循环内要把图像处理完成

2)建议把 queue的size开大一些,拿内存去换时间

3)需要长时间保留在内存的图片,建议直接执行copy再自行删除

面阵相机

面阵相机的方案跟线扫描的方案一是一致的,方案二的方式可以尝试一下(我没有试过,因为面阵一般来说图比较小,创建耗时比较低,没去特地做优化)

线扫描相机行数复用

优化方案

这个功能主要是用在循环拍摄时,当前图片需要上一张图像尾巴上的固定若干行信息,按照以下方式,整体的内存拷贝效率高,只需要拷贝复用的行数即可。

我们可以把这个步骤直接做到相机中,可以参考线扫描相机的优化的两个点,在这直接加一些逻辑。

先假设相机SDK设置的图像是 8192*3000,复用的行数是100.

1)首先,如果我们需要复用100行上一张的图像,我们在制作图像指针时要制作比SDK设置图像的高度+100,那么我们需要做 8192*3100的图像指针出来。

2)在设置指针给SDK时,需要对指针进行偏移 100行,这样相机能正常的采集图像并拷贝进指针中

3)每次采集完成回调后,需要将上一张图的尾巴100行的指针拷贝到当前图像的前100行中

4)图像处理

注意事项

1、第一张图头部几行会是全黑的,这里建议判断是否是第一张图像,如果是的话,给图的时候做指针偏移给3000行的图,这样可以避免第一张图的异常

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

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

相关文章

MTK Linux DRM分析(十三)- Mediatek KMS实现mtk_drm_drv.c(Part.1)

一、简介 MediaTek (MTK) 的DRM驱动(基于mtk_drm_drv.c)是为MediaTek SoC(如MT6985、MT6895等)设计的显示子系统(Display Subsystem)驱动程序。它实现了Linux DRM/KMS框架,支持多CRTC、多平面(plane)、连接器(connector)和编码器(encoder)的显示管道。驱动处理硬…

Wireshark笔记-DHCP流程与数据包解析

背景DHCP从大学上网络课时就开始知道了,当时只知道,能让计算机上网,要不就静态配IP,要不就DHCP获取,就能上网。2021年时,毕业好几年了,想学习下网络知识,就准备考一个软考网工。按要…

Coze用户账号设置修改用户头像-前端源码

概述 Coze Studio的用户头像修改功能是用户账号设置中的重要组成部分,允许用户上传和更新个人头像。本文将深入分析该功能的前端实现,包括组件架构、文件上传处理、API设计和用户体验优化等方面。 技术架构 整体架构设计 Coze Studio采用现代化的前端架构…

新手Github提交PR(Pull requests)详细教程

一、什么是Pull requests? Pull Requests(PR)是代码协作平台(如 GitHub、GitLab 等)中的一种功能,用于提议将某分支的代码变更合并到另一个分支(通常是主分支)。它允许开发者在合并…

本地通过跳板机连接无公网IP的内网服务器

本地环境:SSH client 堡垒机:有公网IP,有连接内网服务器的秘钥 SSH配置: Host jmsHostName [堡垒机的公网IP]Port 22User rootIdentityFile ~/.ssh/id_rsaHost appHostName 10.0.0.14Port 22User rootIdentityFile ~/.ssh/svc-p…

B树,B+树,B*树

下面我们来详细讲解一下 B树、B树、B*树 这三种非常重要的多路平衡查找树。它们在数据库和文件系统中有着极其广泛的应用。一、为什么需要这些树结构?在开始之前,我们先思考一个问题:为什么已经有了二叉搜索树(BST)、A…

汽车零部件工厂ESOP系统工业一体机如何选型

在汽车零部件工厂的生产管理中,ESOP 系统发挥着至关重要的作用。而工业一体机作为 ESOP 系统的关键硬件支撑,其选型的合理性直接关系到生产效率的提升、生产过程的精准控制以及生产数据的可靠采集与分析。因此,为汽车零部件工厂选择一款适合的…

​维基框架 (Wiki Framework) 1.1.0 版本发布​ 提供多模型AI辅助开发

介绍 多模型AI辅助开发​ 维基框架1.1.0集成了主流AI引擎的统一接口,支持开发者按需调用不同模型的优势能力: ​DeepSeek​:专注代码生成与重构,擅长复杂业务逻辑实现 ​ChatGPT​:多模态推理能力,适用于…

LabVIEW调用MATLAB 的分形生成

LabVIEW 调用 MATLAB,可借前者可视化流程与硬件交互优势,结合后者强数值计算、算法能力,复用成熟算法提速开发,还能灵活改代码。但需匹配版本、装运行环境,数据传递有性能损耗,脚本出错需跨软件调试。​优点…

ubuntu20.04开发ros2,使用docker安装部署的详细教程

学习docker的教程:可以直接在菜鸟教程上学习即可阶段 0:系统检查| 内容 | 建议 | |------|------| | 操作系统 | Ubuntu 22.04(与 ROS2 Humble 最匹配) | | 用户权限 | 能执行 sudo |🧩 阶段 1:在 Ubuntu 上…

SQL Server缩小日志文件.ldf的方法(适用于开发环境)

SQL Server缩小日志文件.ldf的方法(适用于开发环境) 核心概念:为什么日志文件会变大? 首先,理解原因至关重要。事务日志文件在以下情况下会增长: 大量操作:执行了大批量插入、更新或删除操作&am…

2.3零基础玩转uni-app轮播图:从入门到精通 (咸虾米总结)

还在uni-app中的轮播图组件头疼吗?看完这篇,让你轻松掌握swiper的所有秘密!轮播图的重要性 在现代移动应用开发中,轮播图(Swiper)已成为展示焦点内容、广告推广和产品展示的首选组件。无论是电商平台的商品…

FPGA学习笔记——AHT20温湿度读取并在串口显示(IIC协议)

目录 一、任务 二、分析 1.需要了解的 2.需要用到的模块 3.流程分析 三、Visio图 四、代码 五、实验现象 一、任务 使用IIC协议通信的AHT20,将温湿度数据读取出来,并在串口助手上显示。 二、分析 1.需要了解的 需要了解IIC协议简介 也可以看看E…

Pycharm SSH连接

添加远程服务器文件——>设置——>项目下的Python解释器——>添加解释器——>SSH在弹出的弹窗中,输入远程的主机、端口和用户名、一直下一步,得到如下图所示的结果:选择Conda 环境:第一步选择Conda环境;第…

c# 读取xml文件内的数据

好多大型的项目&#xff0c;把一些固定的参数都存在 xml文件里。创建c# winfom 项目&#xff0c;test_xml创建resources文件夹存放xml文件创建parameters.xml文件<root><test_xml><param name "threshold" value "128"/><param name …

Legion Y7000P IRX9 DriveList

Legion Y7000P IRX9 DriveList 联想Y7000P驱动列表 驱动列表 intelwlan-TYY5057FK6MQBRF0.exe NVVGA-TYY5057F3M0H9RF0.exe RTKwlan-TYY5077FFSNECRF0.exe audio-TYY5057F4N1JARF0.exe chipset-TYY5037FB10X3RF0.exe hdr-TYY5027FXNF9AWF0.exe intelVGA-TYY5057F5R9J7RF…

编程与数学 02-017 Python 面向对象编程 23课题、测试面向对象的程序

编程与数学 02-017 Python 面向对象编程 23课题、测试面向对象的程序一、单元测试&#xff08;Unit Testing&#xff09;使用 unittest 模块使用 pytest二、集成测试&#xff08;Integration Testing&#xff09;三、模拟对象&#xff08;Mocking&#xff09;四、测试驱动开发&…

[React]Antd Cascader组件地区选择

前言表单中添加一个地区选择功能&#xff0c;要求支持增删改查功能。Cascader 使用Cascader组件动态加载地区选项。使用 loadData 实现动态加载选项&#xff0c;&#xff08;loadData 与 showSearch 无法一起使用&#xff09;。 这里使用了Form.Item组件。 <Form.Itemlabel{…

深度学习-----《PyTorch神经网络高效训练与测试:优化器对比、激活函数优化及实战技巧》

一、训练过程并行批量训练机制一次性输入64个批次数据&#xff0c;创建64个独立神经网络并行训练。所有网络共享参数&#xff08;Ω&#xff09;&#xff0c;更新时计算64个批次的平均损失&#xff0c;统一更新全局参数。梯度更新策略使用torch.no_grad()上下文管理器清理反向传…

Matplotlib 可视化大师系列(五):plt.pie() - 展示组成部分的饼图

目录Matplotlib 可视化大师系列博客总览Matplotlib 可视化大师系列&#xff08;五&#xff09;&#xff1a;plt.pie() - 展示组成部分的饼图一、 饼图是什么&#xff1f;何时使用&#xff08;何时避免&#xff09;&#xff1f;二、 函数原型与核心参数三、 从入门到精通&#x…