:1.工业相机编程模型和流程
2.工业相机SDK接口使用总结
3.Basler Pylon工业相机SDK的使用
4.Pylon 以实时图像采集讲解PylonC SDK使用流程
5.关于使用维视工业相机 SDK 采集图像的问题
6.工业相机SDK之opencv二次开发这里写自定义目录标题)

1.工业相机编程模型和流程
不同的工业相机提供不同的编程接口(SDK),尽管不同接口不同相机间编程接口各不相同,他们实际的API结构和编程模型很相似,了解了这些再对工业相机编程就很简单了。
DMA技术
DMA是一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。整个数据传输操作在一个称为"DMA控制器"的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高。对于工业相机来说,当CMOS或CCD芯片曝光然后将数据转到相机缓存后,这时候DMA会负责将缓存中数据保存到硬盘上指定位置,正好满足相机高速大数据的传输。一般都会使用DMA来完成实时的数据采集和保存。多数时候,DMA控制器存在各种接口的图像采集卡中,包括1394/GigE/USB/Camera Link等,这些采集卡有自己的时间控制单元完成和相机曝光的同步,并控制DMA的存取行为。工作流程当相机工作时,就是连续的采集-处理-采集-处理…的过程,但是这就存在一个问题,如果采集的速度比处理速度快,处理不过来,怎么办?在实际中,我们使用队列来解决这个问题,当前帧没有处理完,下一帧到来时直接放入队列等待当前处理完成后再处理它。
如下图

这里使用三个队列完成采集和处理同步。
DMA队列:当CMOS或CCD芯片曝光然后将数据转到相机缓存后,这时候DMA会负责将缓存中数据写入到“DMA队列”头Buffer中。
准备队列:一旦“DMA队列”头Buffer被填充完成,会被加到“准备队列”尾后,这时候会发送中断通知用户程序:当前又有一帧数据采集完成,您看着处理吧。
处理队列:当用户接收到中断会自动跳转到中断函数中,使用GetFrame拿取“准备队列”头Buffer,然后加到当前用户程序“处理队列”尾,用户程序从“处理队列”头拿取Buffer处理完成后使用PutFrame将Buffer再添加到原始的“DMA队列”尾。
需要说明如下几点
1.这里的初始队列为1-10,都是初始分配为DMA队列的,这个内存分配和释放过程有的SDK是自己负责的,有的则需要用户自己分配和释放,SDK只负责托管使用。
2.一般最开始注册一个中断处理函数,当“准备队列”填充完成会自动跳转到中断函数中,借此完成同步操作。也可以是用户自己维护同步结构体,使用查询和等待的方式判断“准备队列”头是否填充完成,是否该用户程序获取数据和处理了。
3.如果用户处理任务非常简单,可以去掉“处理队列”,每次直接GetFrame->处理->PutFrame。如果用户处理任务比较复杂而不希望出现丢帧的现象,则需要用户使用“处理队列”来保存所有可用的Buffer。
4.这里队列也只是能够解决处理速度比采集速度慢少许的情况,主要是对不同处理速度做平均来保证采集和处理同步。如果每一帧的处理时间太长,这时候“DMA队列” Buffer全部转移到“处理队列” Buffer,就会出现异常情况,这时不同的相机会有不同的处理方法。
数据传输和显示流程

每个相机可能有不同的流采集器(Grab Streamer)或同一接口上安装了多个相机(也对应多个流采集器),对应多个通道(Channel)。对每个通道来说,在实际采集时数据传输实际上是拆分成如图的数据包(Packet) RawData形式传递的,内存中存储形式为一维数组,在每一帧图像的起始存在不同的标识表明一帧的开始和结束,每一个Packet都有标识表明当前所属的通道。为了显示图像,用户程序需要重新将一维数组数据拼装成图像形式,这一过程由用户完成,通常可借助OpenCV或MIL等图像处理包完成该操作。

编程模型和流程对于相机来说,常见编程时我们关注三个对象——相机对象、采集对象、参数对象。
相机对象(Camera Object):负责相机的连接、断开等工作。
采集对象(Grab Streamer):负责相机的采集队列分配、相机单帧、连续采集。
参数对象(Parameter Object):负责相机参数的设置。
不同的SDK可能安排不一样,一般来说要不是三种对象的功能合并到“相机对象”中,要不是分为三种对象,其实采集对象和参数对象都是在“相机对象”上封装而来。
通用编程流程如下图:


可以看到相机编程需要做三方面工作:
1.初始化操作首先初始化相机驱动Com环境,然后遍历得到当前的相机列表,根据相机ID或List 编号选择对应相机。之后连接指定相机,首先设置本次采集的相机参数(帧速、图像大小、缩放比等),然后是分配和注册当前DMA队列,这里有的是用户完成,有的是SDK完成。之后先开启DMA逻辑等待相机采图,然后使相机开始工作采图,整个系统就按照之前工作流程运作起来了,许多SDK将“开启DMA”和“相机开始工作”合并为“开始采集”。
2.结束操作先停止相机工作再关闭DMA逻辑,许多SDK将“开启DMA”和“相机开始工作”合并为“结束采集”。然后清理DMA队列,和分配时对应,这里有的是用户完成,有的是SDK完成。最后断开相机并清理工作环境。
3.中断响应操作当相机一帧采集完成后,自动跳转进入中断回调函数,这里分了两种中断回调函数。第一种为简单的取Buffer->处理->放回。第二种结合Windows的消息队列,在此处再给一个“处理队列”,给处理一个缓冲时间。这里的处理包括常见的图像处理、计算和显示及RawData拼装为图像等用到Buffer的地方。

  1. 工业相机SDK接口使用总结
    相机调用我们利用相机采集图像,首先要对相机进行相关参数设置及控制,这需要对相机的SDK包比较了解,一般相机厂家都会提供相机SDK,其中包含用户手册和调用Demo,这些都大大降低了调用门槛,提高了二次开发用户的效率。目前用过Balser、海康、大华等相机,其实都是一个套路,都是按照下面几个步骤进行的。
    1)枚举设备
    2)创建句柄
    3)打开设备
    4)开始抓图
    5)获取一帧并保存图像
    6)停止抓图
    7)关闭设备
    8)销毁句柄
    相机同步若是开发过程中用到双目或者多目的话,则需要外接同步触发器或者外部触发信号,通过相机同步触发线来实现同步问题。以实际应用过的Basler acA1300-200uc为例,其相机同步触发线具体类型如下:1 -—— +12 VDC 红2 —— I/O Input 1 黄3 —— VCC(加电阻) 蓝4 —— I/O Out 1 绿6 —— DCcam Power GND 黑0000—— I/O GND 白

4.Pylon 以实时图像采集讲解PylonC SDK使用流程
PylonC SDK的使用的总体流程图如下:

加载相机对象

卸载相机对象

加载数据流抓取对象

卸载数据流

抓取对象单帧或连续抓图过程

bd>Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片:

带尺寸的图片:

居中的图片:

居中并且带尺寸的图片:

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目

    • 项目

      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n−1)!∀n∈N 是通过欧拉积分

Γ(z)=∫0∞tz−1e−tdt .\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞​tz−1e−tdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0开始我的操作确认?结束yesno
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. 注脚的解释 ↩︎

工业相机SDK二次开发相关推荐

  1. 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一)

    最近在做一个项目,涉及到工业相机,需要对其进行二次开发.相机方面选择了海康威视,网上关于海康威视工业相机SDK的开发资料很少,官方文档里面虽然写的是支持C++开发的,但其实是C.自己也摸索了一段时间, ...

  2. 海康威视工业相机SDK二次开发

    海康威视工业相机SDK二次开发 好气,第一次写文章,结果没不小心保存关掉,什么都没了. 本人是一名在读研究生,被导师分配了做项目中海康工业相机的二次开发.实现的需求是:实现八个相机同时打开视频,并且分 ...

  3. VS2015配置海康威视工业相机SDK二次开发

    1.概述: 工业相机SDK是用于控制相机的一个独立组件,支持获取实时图像数据.配置参数.对图像进行后续处理等功能.工业相机SDK兼容GigE Vision协议.USB3 Vision协议.Camera ...

  4. gige相机二次开发_海康威视工业相机SDK二次开发示例程序demo和PDF说明.zip

    1 海康威视相机demo和PDF说明\Samples\DirectShow\DirectShowDisplay\lib\x64\uuid.lib 4.73 MB 2018/12/29 10:59:06 ...

  5. 海康威视工业相机SDK二次开发环境配置—Windows10+VS2017

    参考链接: https://blog.csdn.net/motikesi/article/details/108287951 一.SDK下载地址: https://www.hikrobotics.co ...

  6. DALSA工业相机SDK二次开发(图像采集及保存)C#版

    一,首先先配置生成项目,根据官方文档步骤来: 这个没啥好说的,一步步照做就是了,就最后一步,开始我没重视,最后代码写完测试的时候还真的遇到问题了,一直出这样的错: 查了官方文档才看到最后一条~,然后在 ...

  7. C#工业相机SDK二次开发 未能加载文件或程序集“CLIDelegate.dll”或它的某一个依赖项。找不到指定的模块。”

    问题描述 System.Exception:"Exception caught: 未能加载文件或程序集"CLIDelegate.dll"或它的某一个依赖项.找不到指定的模 ...

  8. Linux下海康威视工业相机的SDK二次开发

    1.客户端软件MVS的安装 1.1安装包的下载和解压 去 官网 下载两个软件安装,分别是客户端和开发环境.(这里我们下载V2.1.1(Linux)和Runtime组件包(Linux)): 工业相机文档 ...

  9. 海康工业相机LabVIEW二次开发——修改参数、存图

    最近使用LabVIEW对海康机器人的工业相机进行二次开发,没有专门介绍LabVIEW的开发手册,本文就简单的写一写单相机取图显示以及存图的开发步骤. 如果各位是直接使用IMAQdx开发的,可以直接下载 ...

  10. 海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++)

    Livox Lidar  + HIKROBOT Camera系列 最近在开发相机和激光雷达融合的slam算法,主要用于三维重建,想实时的得到彩色点云地图,传感器选择了海康威视的工业相机和大疆的固态激光 ...

最新文章

  1. Spring工厂常识
  2. 你的登录接口真的安全吗?快看看你有没有中招!
  3. lixuxmint系统定制与配置(4)-应用安装
  4. 2019.08.08学习整理
  5. 微信小程序view动态长度_微信小程序实现动态获取元素宽高的方法分析
  6. 队列的链式存储结构及其实现_了解队列数据结构及其实现
  7. cmake取消宏定义_Excel基础丨取消excel中宏安全提示框
  8. Google Maps API 以某一经纬度为中心,以某一长度位半径画圆 Draw the radius of a circle...
  9. 想要高清壁纸,高图桌面壁纸网站值得收藏!
  10. 新手必读——OOP三大特征及联系
  11. Linux实现倒计时显示时分QT,qt实现倒计时示例
  12. 柯尼卡美能达c353改语言,柯尼卡美能达bizhub c353c253c203维修手册中文部分2.pdf
  13. win10计算机本地组策略编辑器,win10本地组策略编辑器打不开最佳解决方法
  14. vb.net 教程 5-21 拓展 如何给IE浏览器截图
  15. 电脑BIOS为UEFI BIOS,出现蓝屏情况“你的设备遇到问题,需要重启。我们只收集某些错误信息,然后你可以重新启动。100%完成“,解决方法。
  16. 单细胞测序的入门操作
  17. IDF实验室之牛刀小试
  18. 裁员风暴下,脉脉们却在背后偷着笑?
  19. 2021年中国集成电路重点企业对比(光迅科技VS大唐电信VS士兰微VS中芯国际)[图]
  20. 【制作】基于金沙滩51单片机的电子密码锁程序

热门文章

  1. 微信小程序-获取微信用户手机号码
  2. 手机无法服务器获取信息,荒野行动获取服务器信息一直不动怎么办 获取服务器信息为0解决方法...
  3. Vue模板语法——插值
  4. java选择排序(从大到小和从小到大)
  5. VS+Qt应用开发-设置软件图标
  6. 微商的十种实用推广方法
  7. idea打包jar的多种方式(总结-共三种)
  8. kindle阅读订阅的google reader时,词典不能工作的修正
  9. 计算机网络【课程复习】
  10. 学习笔记(六):C++串口连接