资讯详情

Blackfly S USB3工业相机:缓冲区处理

Blackfly S USB3工业相机:缓冲区处理

  • Flir Blackfly S USB3 产品介绍
  • 介绍相机缓冲区
  • 缓冲区处理
    • 缓冲区处理模式
      • 缓冲区处理模式示例
        • 示例 1
        • 示例 2
  • 传输队列(摄像头机载图像缓冲区)
  • 通过Code改变缓冲区的大小

本博客的技术内容可应用于 FLIR 的网口和USB3的相机

Flir Blackfly S USB3 产品介绍

Blackfly S 采用行业先进的冰形传感器。 它具有强大的功能,可以轻松生成所需的精确图像,并加速应用程序的开发。 包括自动和准确的手动控制图像捕获和相机预处理。 Blackfly S 提供GigE、USB3.套装和板级版。 精确图像 索尼CMOS传感器的选择包括:全球快门、偏振和高灵敏度BSI传感器。

以下是缓冲区和缓冲区处理模式的本质及其工作模式,并提供拍摄图像的预期效果示例

介绍相机缓冲区

图像被摄像头拍摄后,会自动传输到 PC 并存储在 RAM 中。 默认情况下,缓冲区,缓冲区的数量默认自动分配内存。 通过自动切换区计数模式从自动切换到手动,并为手动流缓冲区计数分配一个值,可以改变相机相关缓冲区的数量。 缓冲区的最大数量取决于缓冲区的最大数量 RAM 每个缓冲区的大小取决于图像的大小。

Spinnaker 1.13 而且更高具有自动缓冲计数模式功能。 之前版本默认将缓冲区的数量设置为 10。

使用图像时,只能在从缓冲区检索图像后与图像交互。 这种交互包括在屏幕上显示图像、保存磁盘或应用图像处理。

缓冲区处理

缓冲区的处理决定了每个摄像头的可用性(如果可以覆盖)和

缓冲区处理模式

Spinnaker 处理缓冲区有四种:

应用处理输出缓冲区队列末尾图像(最新可用的) 这种方法更好地应用于运动预测,需要始终获得最新帧,但之前的帧也可以添加有价值的信息。 在这里插入图片描述 应用程序总是处理最近完成的图像(最新的)。 丢弃之前的图像。 忽略了流缓冲区的计数。 该模式通常用于实时显示 GUI,摄像头和显示屏之间没有延迟。 应用程序始终处理输出缓冲区队列的第一个图像(最早的图像) 应用程序总是处理输出缓冲区队列的第一个图像(最早可用)。 若有新图像传入,则从队列开头盖上缓冲区。 它看起来像一个循环缓冲区。

缓冲区处理模式示例

以上解释比较抽象,下面举几个例子就清楚了。

示例 1

触发摄像头 6 次。 每次触发后,我们将检索图像并输出 FrameID(Frame ID 始终从 0 开始)。 示例条件:

  • 1 FPS
  • 无图像处理
  • 缓冲区数量或缓冲区处理模式无变化 示例结果:
  • 0、1、2、3、4、5 无论采用哪种缓冲区处理模式,结果都应相同。 但是,如果相机触发的处理能力比主机快,或者如果主机端延迟,图像将被丢弃。 这样,输出帧 ID 可能与上述结果不匹配 同样,当图像检索位置与其传输位置不同时,缓冲区处理模式将决定检索图像和图像的顺序。

示例 2

触发摄像头 6 次。 第六次触发后,我们开始检索三个图像,然后输出 FrameID。

示例条件:

  • 1 FPS
  • 无图像处理
  • 缓冲区的数量为 3(PC 只保留内存 3 张图像)
  • 各缓冲区处理模式逐一应用

  • 2、1、0
  • 没有盖子,相机保留了先拍摄的三张图像,丢弃了 3、4、5 帧

  • 5、错误
  • 相机保留了最新的图像,但当试图检索不存在的图像时,出现了错误

  • 和先处理最新一样,区别在于最早的图像首先被检索

  • 3、4、5
  • 帧 0、1 和 2 被盖写着,表示帧 3 它是最早的图像,先检索,然后检索帧 4 和 5

传输队列(摄像头机载图像缓冲区)

每个摄像头都有机载图像缓冲区,每个图像都必须通过缓冲区。 它还可以用来无限期地存储图像,只要摄像头保持通电。 多个图像可以存储在图像缓冲区。

Blackfly S 摄像头拥有 240 MB 的图像缓冲区。

每个图像占用的空间是摄像头最大分辨率的四倍。 例如,BFS-U3-13Y3C 相机的分辨率是 1.3 MP,然后每个图像都会占据图像缓冲区 5.2 MB 的空间。 可以存储的最大图像数量见 TransferQueueMaxBlockCount 节点。 目前在相机上缓冲的图像数量见 TransferQueueCurrentBlockCount 节点。

如果 USB3 摄像头拍照后 PC 如果没有可用的缓冲区,图像将自动存储在机载缓冲区。 一旦 PC 有一个可用的空间,相机机载缓冲区的图像将自动传输到 PC。 若采用先处理最新模式,则会干扰预期的图像顺序。

通过Code改变缓冲区的大小

通过Spinnaker C 接口 将缓冲区的大小改为11,默认为10

Spinnaker::GenApi::INodeMap & sNodeMap = cam->GetTLStreamNodeMap(); CIntegerPtr StreamNode = sNodeMap.GetNode(“StreamDefaultBufferCount”); INT64 bufferCount = StreamNode->GetValue(); StreamNode->SetValue(11);

通过 GetTLStreamNodeMap 获得NodeMap 通过 GetNode 获得Node 通过 GetValue 默认缓冲区大小 通过 SetValue 将缓冲区大小设置为11

标签: bsi3三相电流变送器传感器bfs

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台