当前位置: 首页 > news >正文

C# 相机内存复用(减少图像采集耗时)以及行数复用

背景

我们在做图像处理时,都会对一些相机的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.dtcms.com/a/350606.html

相关文章:

  • 自定义树形构造器
  • python项目实战 3D宠物狗
  • 关于传统的JavaWeb(Servlet+Mybatis)项目部署Tomcat后的跨域问题解决方案
  • MM-2025 | 北航双无人机协作助力视觉语言导航!AeroDuo:基于空中双机系统的无人机视觉语言导航
  • 简述mysql中索引类型有哪些,以及对数据库的性能的影响?
  • JBL音响代理——河北正娱科技的声学精品工程
  • 网络编程-HTTP
  • 插曲 - 为什么光速不变
  • 【代码】洛谷P3391 【模板】文艺平衡树(FHQ Treap)
  • 低质量视频变高清AI:告别模糊,重现清晰画质
  • chrome插件开发(二)
  • vue家教预约平台设计与实现(代码+数据库+LW)
  • 驱动-热插拔-Netlink广播监听内核状态
  • HarmonyOS实战(DevEco AI篇)—CodeGenie + DeepSeek构建鸿蒙开发的超级外挂工作流
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十九)子窗口
  • 您的连接不是私密连接问题解决
  • 借Copilot之力,实现办公效率的跃升
  • 数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_索引和视图
  • 软件使用教程(二):VS Code的Copilot、Git设置与使用
  • 复制和下载飞书文档的方法教程
  • Unity开发如何实现换装技术
  • Ubuntu 14.10 i386桌面版安装教程(U盘启动详细步骤-附安装包下载)​
  • LeetCode 100题(3)(10题)
  • 实用电脑小工具分享,守护电脑隐私与提升效率21/64
  • CANopen - DCF(Device Configuration File) 介绍
  • 平安产险青海分公司助力国家电投黄河公司安全生产
  • 2024鸿蒙样题需要掌握的知识点
  • Shopify 集合页实现自定义广告位插入(支持分页)
  • C++ 指针与引用面试深度解析
  • k8s数据存储