教程

pylon C++ API:显著缩短开发时间

借助pylon C++ API,开发人员在C++编程中可比其他SDK节省80%的开发时间。本教程将向您展示,仅通过pylon Viewer中的几行代码即可访问并配置相机,实现基于初始图像采集的快速原型设计。我们提供了用于配置、处理及优化的辅助工具与示例代码。借助统一的API,您的最终代码可轻松移植到其他操作系统上。

  • 阅读时间:约 15 分钟

Tip

先决条件

请注意以下几点,以便快速掌握pylon C++ API,并有效利用所提供的示例和工具。

  • 扎实的C++知识:该API在技术上具有一定难度,需要对C++和面向对象编程有深入的理解。

  • 已安装的pylon软件(SDK)::包含C++ API、文档、编程指南、工具(例如pylon Viewer)以及大量示例程序。

  • 支持的操作系统:pylon支持多种平台(Windows、Linux、Linux ARM、macOS),因此应搭建相应的开发环境。

  • 具备兼容的相机硬件(可选,但建议使用):支持的相机有助于进行实践练习和测试,但并非入门必备条件。

帮助和示例代码

用于开发和调试的pylon Viewer

  • 显示所有相机参数,包括其属性及当前值

  • 上下文菜单:右键点击参数 → 获取帮助产品文档→ 可复制的完整代码

此外,您还可以在帮助菜单中找到以下内容:

  • 《C++程序员指南》 - 是您进行多编程语言开发的得力助手

  • pylon SDK示例手册,详细介绍了可用的相机参数示例代码及典型使用实例;可轻松将代码集成到您的应用中

用于相机参数的C++ SDK示例,助力快速获得结果,并可在您的应用中重复使用。
用于相机参数的C++ SDK示例,助力快速获得结果,并可在您的应用中重复使用。

pylon C++ API架构

pylon C++ API由以下几个模块组成:

  • pylon即时相机类:API的核心组件 → 用于访问相机对象以及单相机和多相机系统(即时相机数组类)的相关功能

  • 事件处理程序类:使用较少的代码来配置相机,处理所采集的图像,并显示相机事件

  • GenICam实施:在pylon中显示所有当前相机特性

  • 传输层:连接至pylon驱动程序 → 枚举相机,创建相机对象

    • 通用传输层工厂

    • 与接口相关的特定传输层

  • 用于处理图像的工具类:仅需一行代码即可显示和保存图像,转换像素格式,使用编码器录制视频,以及解压图像

pylon C++ API由多个模块组成
pylon C++ API的结构

在pylon中使用GenICam功能

我们每款相机功能均通过一个(或多个)GenICam XML文件进行描述,其中包含400至500项功能。

当相机启动时,pylon会自动将这些XML文件下载到PC上,并据此动态生成特征图(INodeMap)。通过该特征图就能以结构化且标准化的方式来访问相机支持的所有功能。

通过即时相机类实现集中式相机访问

利用这两个相机类,您可以通过相机对象访问多项相机功能:图像采集、相机参数、相机连接以及缓冲区处理。您无需为此设置任何只需一行代码即可获取第一张图像。可通过单台相机数组对象(CInstantCameraArray)来支持多相机系统。

CInstantCamera

  • 基于GenICam的完全通用类,是构成pylon Viewer的基础

  • 该类不了解具体的相机接口或参数

  • 可通过动态INodeMap访问相机参数

  • 兼容所有相机、接口和参数

优点:对pylon更新的需求较少;能够满足未来新接口或相机类型的要求

缺点:编程更为复杂,短期开发成本较高

CBaslerUniversalInstantCamera

  • 随每次新版pylon的发布而生成和更新 → 基于所有Basler相机的最新GenICam XML文件

  • 该类熟悉并支持最新的Basler相机、接口和参数

  • 通过类访问原生参数

  • 通过静态API(用于相机参数的静态成员)和IDE自动补全功能,简化相机配置

优点:通过直接访问参数,让原型设计和相机配置更简单快捷;降低开发难度

缺点:需定期更新pylon以获取新功能

初始图像采集的示例代码

观看视频,了解如何仅用几行代码配置所有设置,从而使用单相机或多相机系统获取首批图像:

  • 枚举、启动和配置相机

  • 自动管理缓冲区

  • 通过单个相机对象访问多台相机

有关详情和代码示例,请查看《C++程序员指南》

用于相机枚举的传输层

您可以使用通用传输层和特定传输层来枚举相机并创建相机对象。如需访问相机参数,可通过上述两个即时相机类,使用前文所述的两种方法来实现。

传输层工厂(CTlFactory)

  • 通用入口点

  • 枚举所有相机,接口类型不限

  • 创建特定的传输层

  • 将相机对象创建为pylon设备

传输层(ITransportLayer)

  • 特定接口的传输层(例如GigE Vision)

  • 枚举特定接口上的相机

  • 将相机对象创建为用于现有传输层的pylon设备

  • 检索接口特定参数(例如GigE Action Command)

相机枚举的示例代码

在本视频中,您将学习如何仅通过几行代码,利用不同的技术枚举相机并创建相机对象,同时使用通用和特定的传输层。

还可以通过IP地址(GigE)、用户ID或序列号来枚举相机。

有关详情和代码示例,请查看《C++程序员指南》

通用参数访问
(CInstantCamera)

  • 加载INodeMap并据此创建节点(即相机参数)

  • 在集成新接口和功能时具有灵活性且能满足未来需求

  • 掌控查找参数信息和属性的难度

  • 内置的帮助功能可减少需要编写的源代码量

原生参数访问
(CBaslerUniversalInstantCamera)

  • 直接访问常用相机参数(需先打开相机)

  • 无需创建INodeMap

  • 快速轻松地开始项目

相机参数的示例代码

该视频通过示例代码,详细讲解了如何使用通用方法和原生方法来访问相机参数。

有关详情和代码示例,请查看《C++程序员指南》

事件处理程序类和工具类

事件处理程序使用较少的代码来配置相机,处理所采集的图像,并显示相机事件。

工具类可以执行各式任务。在本视频中,我们将向您介绍其中三个任务。

事件处理程序类

即时相机类包含三个预定义的事件处理程序类。

  • 配置处理程序:图像采集或触发模式等相机配置(预设4种模式:单帧图像采集、连续图像采集、软件触发、GigE Action Command)

  • 图像事件处理程序:处理采集的图像

  • 相机事件处理程序:显示曝光结束等相机事件

本视频将展示如何仅用几行代码即可成功配置一台相机。

配置处理程序可用于类似的用例。它以头文件的形式提供,只需复制并修改代码,即可创建用于硬件触发器等用途的配置处理程序。

工具类

CPylonImage

  • 自动管理缓冲区(大小、生命周期)

  • 使用自身或外部缓冲区

  • 保存或加载常见图像格式(BMP、TIFF、JPG、PNG、RAW)

  • 轻松编辑2D图像和感兴趣区域(例如缺陷的缩略图)

CFeaturePersistence

  • 保存整台相机配置,并轻松将其加载到其他相机中

CVideoWriter

  • 使用较少源代码来录制MPEG-4视频

  • 将采集的图像(图像序列)写入视频文件

在本视频中,我们将介绍三个工具类。有关其他类的详细信息,请查看SDK示例(可通过帮助菜单访问)。

演示:设置一个pylon Visual Studio项目

在本演示中,您将了解如何从零开始创建一个pylon Visual Studio项目:

  • 查找、打开并配置相机(或相机模拟)

  • 只需五分钟即可获取、显示和保存图片

《C++程序员指南》(可通过帮助菜单访问)将逐步引导您完成整个过程。

了解详情

您需要获得什么支持?

我们很乐意提供产品选择建议,并助您为应用找到合适的解决方案。