跳转到内容

Framegrabber API#

Framegrabber API 分为多个可链接到项目的库:

库 目的
fglib5
  • 通过加载 Applet 初始化采集卡
  • 访问 applet 参数
  • Memory 管理
  • 图象采集
siso_genicam
  • 发现符合 GenICam 标准的相机
  • 访问相机 Property
  • 执行相机命令
clsersis
  • 根据 Camera Link 标准与相机进行通信
iolibrt
  • 读取和写入标准图像文件格式
display_lib
  • 在窗口中呈现图像数据

Framegrabber API 可用于编写应用程序,以采集和处理来自连接到 Basler 采集卡的相机的图像。Basler 采集卡和 Framegrabber API 支持使用 Camera Link 和 CoaXPress 标准的相机。

信息

从 Framegrabber API 5.9 版本开始,API 发生了一些更改。在整个文档中,此类更改均在各个章节中进行了高亮显示。所有更改均已总结在文档的更改历史记录部分中。

Basler 采集卡使用直接内存访问 (DMA) 将来自一个或多个摄像机的图像直接传输到应用程序分配的 Memory 中。在 Framegrabber API 的上下文中,图像数据从相机经由采集卡到达应用程序 Memory 的路径被称为 DMA 通道(从 Framegrabber API 的角度来看,图像数据通过 DMA 传输进入应用程序 Memory,从而进入应用程序上下文)。

应用程序可以设计为在采集循环中等待新图像,或者可以注册一个函数,以便在有新图像可用时由 Framegrabber API 调用。在这两种情况下,只有在图像完全传输到计算机 Memory 且应用程序可以安全处理图像数据之后,应用程序才会知晓新图像。

应用程序始终必须指定一个时间(通常为若干秒)来等待新图像。为等待新图像而调用的函数将调用随 Framegrabber API 安装一起提供的操作系统驱动程序,并可使调用线程进入休眠状态,直到新图像到达或指定的时间过去(以先发生者为准)。如果在指定的等待时间内没有图像到达,将生成超时错误并报告给应用程序。

Framegrabber API 的工作方式确保了在等待新图像时的低处理器占用率,以及图像数据从相机到应用程序的低延迟传输。然而,这意味着大多数应用程序将被实现为在独立线程中运行图像采集,或者使用回调机制(该机制同样在由 Framegrabber API 管理的独立线程中运行采集循环)。否则,当应用程序等待新图像时,应用程序主线程可能会被阻塞。

等待新图像的时间也意味着,应用程序在等待线程从操作系统驱动程序的调用中返回之前可能无法退出。虽然对于作为机器上单一用户界面运行的应用程序来说这并不是什么大问题,但在多用途计算机上运行、且要求在退出应用程序时具有响应迅速的用户体验的应用程序,最好使用较短的等待时间并相应地处理超时错误。

Framegrabber API 中的函数在不同的线程中使用是安全的,但不同的线程不应并发控制相同的 Feature 或 DMA 通道。

Basler 采集卡可以在将图像数据传输到应用程序内存之前对其应用预处理。虽然大多数采集卡支持一组标准且常用的预处理功能,但通过使用 Basler VisualApplets 和 Basler 的可编程采集卡,应用程序开发人员可以实现更复杂的预处理,从而将图像处理从 CPU 卸载到采集卡的 FPGA 上。