【HALCON 实战入门】5. 相机接入与图像采集

欢迎订阅【HALCON 实战入门】专栏:
1. HALCON 简介与安装
2. HALCON 快速入门
3. HALCON 图像处理流程
4. 图像读取、显示与保存
5. 相机接入与图像采集
6. 交互式绘图与 ROI

5. 相机接入与图像采集

  • 一、图像采集基础
    • [1.1 图像采集系统](#1.1 图像采集系统)
    • [1.2 工业相机的类型和参数](#1.2 工业相机的类型和参数)
    • [1.3 工业相机的输出接口](#1.3 工业相机的输出接口)
    • [1.4 HALCON 图像采集流程概述](#1.4 HALCON 图像采集流程概述)
  • 二、图像采集算子
    • [2.1 设备连接](#2.1 设备连接)
    • [2.2 参数配置](#2.2 参数配置)
    • [2.3 同步采集](#2.3 同步采集)
    • [2.4 异步采集](#2.4 异步采集)
  • 三、图像采集助手
    • [3.1 功能概述](#3.1 功能概述)
    • [3.2 详细操作步骤](#3.2 详细操作步骤)
  • 四、图像采集流程
    • [4.1 标准采集流程](#4.1 标准采集流程)
    • [4.2 单帧采集示例(最小流程)](#4.2 单帧采集示例(最小流程))
    • [4.3 连续采集示例(实时采集)](#4.3 连续采集示例(实时采集))
    • [4.4 异常处理](#4.4 异常处理)
  • 五、海康工业相机接入流程
    • [5.1 网络连接与配置](#5.1 网络连接与配置)
    • [5.2 MVS 配置与测试](#5.2 MVS 配置与测试)
    • [5.3 HALCON 配置与测试](#5.3 HALCON 配置与测试)
  • 六、总结

在前文中,我们已经掌握了图像的读取、显示与保存,能够基于本地图像完成基本的视觉处理流程。图像采集是实际工业场景中机器视觉应用的基础,接下来将介绍如何将相机接入 HALCON,实现图像的实时采集与获取。

一、图像采集基础

在实际工业应用中,图像通常来自相机的实时采集,因此需要先了解图像采集所涉及的基本硬件与接口。

1.1 图像采集系统

图像采集系统是指由工业相机、镜头、光源及计算机等组成的整体装置,其作用是将实际场景中的光学信息转化为可供计算机处理的数字图像,是机器视觉系统的数据输入环节。

图像采集系统通常由以下几个部分构成:

  • 工业相机:负责获取图像,是系统的核心设备;
  • 镜头:用于成像,影响视野范围与清晰度;
  • 光源:提供稳定照明,直接影响图像质量;
  • 计算机:运行 HALCON 程序,完成图像处理;
  • 连接接口:用于相机与计算机之间的数据传输。

简而言之,相机负责图像获取,光源提供成像条件,计算机完成数据处理与分析。

1.2 工业相机的类型和参数

工业相机按图像传感器类型可以分为 CCD 相机和 CMOS 相机。

  • CCD 相机(Charge-Coupled Device)
    成像质量高、噪声低,适用于对图像质量要求较高的场景
  • CMOS 相机(Complementary Metal-Oxide-Semiconductor)
    速度快、功耗低、成本较低,目前应用更为广泛

工业相机按结构形式可以分为 面阵相机和 线阵相机。

  • 面阵相机(Area Scan)
    一次采集完整二维图像,适用于大多数视觉检测任务
  • 线阵相机(Line Scan)
    逐行扫描获取图像,适用于高速或大尺寸连续检测场景

在实际应用中,需要关注以下关键参数,这些参数共同决定了图像质量与系统性能。

  • 分辨率(Resolution):图像尺寸(如 1920×1080),影响细节能力;
  • 帧率(FPS):单位时间内采集图像数量,影响实时性;
  • 像素深度(Fixel Depth):每像素数据的位数,一般为 8bit;
  • 像元尺寸(Fixel Size):影响感光能力与成像质量;
  • 曝光方式(Exposure)和快门速度(Shutter):影响图像亮度与运动模糊;
  • 动态范围:反映相机对亮暗变化的适应能力。

1.3 工业相机的输出接口

工业相机通过不同接口与计算机连接,常见接口类型包括:

  1. USB(USB2.0 / USB3.0)
    连接方便,成本较低,适用于实验与中低速应用。
  2. IEEE 1394(FireWire)
    早期常用接口,稳定性较好,目前使用逐渐减少。
  3. GigE(千兆网口)
    PC 标准接口,传输速率高、距离远,支持网络化部署,是工业应用中最常见接口之一。
  4. CameraLink
    高带宽、低延迟,适用于高速、高精度采集场景。
  5. HDMI
    多用于视频输出与显示场景,在工业视觉中较少用于标准采集。

不同接口的核心差异体现在:带宽、传输距离及稳定性。

1.4 HALCON 图像采集流程概述

HALCON 对相机进行了统一封装,使不同设备的使用方式保持一致,将图像采集过程简化为标准算子调用。

HALCON 为多种工业相机及采集卡提供了标准化的接口支持,支持多种工业相机接口(如 GigE、USB、CameraLink 等),并通过统一机制完成设备管理与图像获取,使开发者无需关注底层驱动细节,只需要通过相应算子即可完成:设备连接、参数配置与图像采集。

从整体上看,图像采集过程可以分为以下几个步骤:

  • 设备枚举:扫描并识别当前可用的相机设备;
  • 设备连接:建立与相机的通信(如 open_framegrabber);
  • 参数配置:设置曝光时间、分辨率、增益等采集参数;
  • 图像采集:获取图像数据(如 grab_image);
  • 通信控制:在采集过程中与设备进行参数调整或触发控制。

概况来说:先连接设备,再配置参数,最后获取图像。

二、图像采集算子

在理解图像采集的整体流程之后,下面将结合 HALCON 的核心算子,逐步实现从设备连接到图像获取的具体过程。

2.1 设备连接

设备连接是图像采集的第一步,其核心任务是建立 HALCON 与相机之间的通信通道。该过程通过算子 open_framegrabber 实现。

open_framegrabber 算子用于打开并配置选定的图像采集设备,建立 HALCON 与相机之间的连接。

  • 该算子在执行过程中会测试与设备的连接、为其他进程锁定该设备,并在必要时为数据缓冲区预留内存。
  • 该算子返回已打开设备的句柄 AcqHandle,后续所有采集与参数操作均基于该句柄进行。
  • 实际的图像抓取通过 grab_image、grab_data、grab_image_async 或 grab_data_async 完成。当不再需要使用图像采集设备时,应调用 close_framegrabber 关闭连接,释放设备供其他进程使用。

算子原型:

c 复制代码
HDevelop: 
  open_framegrabber( : : Name, HorizontalResolution, VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn, Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger, CameraType, Device, Port, LineIn : AcqHandle)

参数说明:

  • Name(输入控制):HALCON 图像采集设备的名称,即对应 DLL 动态库的名称。
    默认:'File',
    建议值: 'ABS'、'ADLINK'、'AlkUSB3'、'Andor'、'BitFlow'、'Crevis'、'DahengCAM'、'DirectFile'、'DirectShow'、'Ensenso-NxLib'、'File'、'FocalSpecLCI'、'GenICamTL'、'GigEVision2'、'GingaDG'、'Ginga++'、'GStreamer'、'heliCamC3'、'KeyenceVJ'、'LinX'、'LPS36'、'LuCam'、'MatrixVisionAcquire'、'MediaFoundation'、'MILLite'、'MultiCam'、'O3D3xx'、'Opteon'、'PhoXi'、'PixeLINK'、'pylon'、'RealSense'、'SaperaLT'、'Sentech'、'SICK-3DCamera'、'SICK-ScanningRuler'、'SiliconSoftware'、'Slink'、'TWAIN'、'uEye'、'USB3Vision'、'Video4Linux2'、'VRmUsbCam'
  • AcqHandle(输出控制):返回值,已打开图像采集设备的句柄。
  • 重要参数(输入控制)
    • HorizontalResolution:水平分辨率,1 = 全分辨率、2 = 半分辨率、4=1/4 分辨率,或直接写分辨率数值,默认:1。
    • VerticalResolution:垂直分辨率,默认值 1。
    • ImageWidth:图像区域的宽度,0 表示自动计算:HorizontalResolution - 2*StartColumn,默认:0。
    • ImageHeight:图像区域的高度,0 表示自动计算:VerticalResolution - 2*StartRow,默认:0。
    • ColorSpace:输出图像颜色格式,建议值:'gray'、'raw'、'rgb'、'yuv'、'default',设备默认 'default' 。
  • 其它参数(输入控制),通常可以设置为默认值。
    • StartRow:图像区域左上角行号(若 ImageHeight=0,则表示边框高度),默认:0。
    • StartColumn:图像区域左上角列号(若 ImageWidth=0,则表示边框宽度),默认:0。
    • Field:半帧模式('first'、'second'、'next')或全帧模式,默认:'default'。
    • BitsPerChannel:每个像素、每个图像通道从设备传输的位数(-1 表示使用设备默认值),默认:-1。
  • 设备相关参数(输入控制),通常可以设置为默认值。
    • Generic:设备相关通用参数,具体含义与设备相关,可通过 info_framegrabber 查询。
    • ExternalTrigger:启用外部触发(如果设备支持),可选值:'default'、'false'、'true',默认:'default'。
    • CameraType:使用的相机类型,建议值:'ntsc'、'pal'、'auto'、'default',默认:'default'。
    • Device:图像采集设备的设备号,建议值:'-1'、'0'、'1'、'2'、'3'、'default','default' 表示设备默认。
    • Port:设备连接的端口号,-1 表示设备默认。
    • LineIn:多路复用器的相机输入线路(如果支持),-1 表示设备默认。

返回值:

如果参数值正确且设备成功打开,open_framegrabber 返回 2(H_MSG_TRUE),否则抛出异常。

当调用 open_framegrabber 返回异常时,可通过 get_last_error 获取错误码。

注意事项:

  1. 不同设备支持的参数和默认值可能不同,实际使用时建议通过 info_framegrabber 查询特定图像采集设备的详细信息,返回所有可配置参数名称及其当前值。
  2. 所有与设备相关的参数完整文档,可在 doc/html/reference/acquisition 目录下的对应接口文档中查看。
  3. 同一相机的不同接口(GigE、USB等)对应的 Name 参数不同。
  4. 对于符合 GenICam 标准的 GigE Vision 和 USB3 Vision 设备,应使用 'GenICamTL' 类型进行初始化。

参考例程:

c 复制代码
* 选择合适的图像采集接口名 AcqName
info_framegrabber(AcqName,'port',Information,Values)
* 使用默认设置打开图像采集设备,详情见实际使用的接口文档
open_framegrabber(AcqName,1,1,0,0,0,0,'default',-1,'default',-1.0, \
                  'default','default','default',-1,-1,AcqHandle)
grab_image(Image,AcqHandle)
close_framegrabber(AcqHandle)

完成设备连接后,通常需要对相机参数进行配置,下面将介绍相关算子。

2.2 参数配置

在完成设备连接后,通常需要对相机进行参数配置,以获得合适的图像质量与采集效果。HALCON 提供了统一的参数设置与查询接口,通过少量算子即可完成对不同相机的控制。

set_framegrabber_param 算子用于设置相机参数,get_framegrabber_param 算子用于获取相机当前参数值。

算子原型:

c 复制代码
HDevelop: 
  set_framegrabber_param( : : AcqHandle, Param, Value : )
  get_framegrabber_param( : : AcqHandle, Param : Value)

算子 set_framegrabber_param 为由采集句柄 AcqHandle 指定的图像采集设备设置特定参数。算子 get_framegrabber_param 返回由 AcqHandle 指定的图像采集设备的参数值。

参数说明:

  • AcqHandle(输入控制):要使用的图像采集设备句柄。
  • Param(输入控制):要设置或查询的参数名称(字符串),如:'color_space'、'continuous_grabbing'、'external_trigger'、'grab_timeout'、'image_height'、'image_width'、'port'、'start_column'、'start_row'、'volatile'。
  • Value(输入控制):要设置或查询的参数值。

参考例程:

c 复制代码
* 设置曝光时间
set_framegrabber_param (AcqHandle, 'exposure_time', 10000)

* 设置增益
set_framegrabber_param (AcqHandle, 'gain', 10)

* 获取当前曝光时间
get_framegrabber_param (AcqHandle, 'exposure_time', Exposure)

参数配置用于控制图像采集质量,是连接设备之后的重要步骤,通过合理设置曝光、增益等参数,可以显著提升后续视觉处理的效果。

2.3 同步采集

在完成设备连接与参数配置后,即可通过图像采集算子从相机获取图像数据,这是整个图像采集流程的核心步骤。

HALCON 提供了两种常用的图像采集方式,二者的区别在于是否阻塞程序执行。

  • 同步采集:在采集到图像并对其处理完成后,才开始采集下一张图像。
  • 异步采集:在当前图像处理的同时,可以并行进行下一帧图像的采集,从而提高系统整体效率。

grab_image 算子用于从指定图像采集设备同步采集一帧图像。

算子原型:

c 复制代码
HDevelop: 
  grab_image( : Image : AcqHandle : )

算子 grab_image 通过句柄 AcqHandle 指定的图像采集设备采集图像。

图像采集设备的工作模式、采集区域以及接口专属附加参数,可通过 open_framegrabber 和 set_framegrabber_param 算子提前设置。

参数说明:

  • Image(输出对象):采集得到的图像。
  • AcqHandle(输入控制):使用的图像采集设备句柄。

注意事项:

  1. 在多线程应用中,info_framegrabber、open_framegrabber、close_framegrabber 为互斥执行。
  2. 如果对应图像采集接口支持,可使用 set_framegrabber_param 设置参数 do_abort_grab 来中止正在进行的采集。

参考例程:

c 复制代码
* 设备连接
open_framegrabber ('GigEVision', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', '192.168.0.2', 0, -1, AcqHandle)
* 参数配置
set_framegrabber_param (AcqHandle, 'exposure_time', 10000)
* 图像采集(同步)
grab_image (Image, AcqHandle)
* 显示图像
dev_display (Image)
* 关闭连接                  
close_framegrabber(AcqHandle)

连续采集示例如下。

c 复制代码
while (true)
    grab_image (Image, AcqHandle)
    dev_display (Image)
endwhile

2.4 异步采集

异步采集本质是先触发再取结果,需要使用算子 grab_image_startgrab_image_async 配合使用:算子 grab_image_start 用于启动异步采集图像,grab_image_async 用于请求异步采集图像。

算子原型:

c 复制代码
HDevelop: 
  grab_image_start( : : AcqHandle, MaxDelay : )
  grab_image_async( : Image : AcqHandle, MaxDelay : )

算子 grab_image_start 通过句柄 AcqHandle 指定的图像采集设备启动异步采集图像。

算子 grab_image_async 向 AcqHandle 指定的图像采集设备请求一帧异步采集图像。默认情况下,grab_image_async 在算子返回前,会自动启动下一帧异步采集。

图像采集设备的工作模式、采集区域以及接口专属附加参数,可通过 open_framegrabber 和 set_framegrabber_param 算子进行设置。

参数说明:

  • Image(输出对象):采集得到的图像。
  • AcqHandle(输入控制):使用的图像采集设备句柄。

注意事项:

  1. 异步采集的完成需要调用 grab_image_async 或 grab_data_async。
  2. 如果对应图像采集接口支持,可通过 set_framegrabber_param 设置参数 do_abort_grab 中止采集。
  3. 如果在 grab_image_async 之后调用 grab_image 或 grab_data,会中止当前正在进行的异步采集,并启动一次新的同步采集
  4. 特定图像采集设备的详细工作行为,请查阅目录 doc/html/reference/acquisition 下对应的接口文档。

参考例程:

c 复制代码
* 选择合适的图像采集接口 AcqName
open_framegrabber('AcqName', 1, 1, 0, 0, 0, 0, 'default' ,-1 , \
                  'default' ,-1.0, 'default', 'default', 'default', -1, \
                  -1, AcqHandle)
* 采集图像 + 自动启动下一帧采集
grab_image_async(Image1, AcqHandle, -1.0)
* 处理 Image1 ...
* 完成当前异步采集 + 启动下一帧采集
grab_image_async(Image2, AcqHandle, -1.0)
* 处理 Image2 ...
close_framegrabber(AcqHandle)

连续采集示例如下。

c 复制代码
* 选择合适的图像采集接口 AcqName
open_framegrabber('AcqName', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', \
                  -1.0, 'default', 'default', 'default', -1, -1, AcqHandle)
* 启动异步采集
grab_image_start(AcqHandle, -1)
* 运行采集循环
while (true)
    * 获取图像,并自动启动下一帧采集
    grab_image_async(Image, AcqHandle, -1.0)
    * 后续:对采集到的图像进行处理
endwhile
close_framegrabber(AcqHandle)

初学者建议优先使用同步采集,在需要提高系统性能时再考虑异步采集。

三、图像采集助手

为了简化设备连接与参数设置过程,HDevelop 提供了图像采集助手(Image Acquisition Assistant),可以通过图形界面完成配置,并自动生成对应代码,极大简化了相机参数调试过程。

3.1 功能概述

图像采集助手通过图形界面完成相机配置,并自动转换为算子代码。其主要作用包括:

  • 自动检测可用相机设备
  • 选择图像采集接口(如 GigE、USB 等)
  • 设置采集参数(曝光、分辨率等)
  • 实时预览图像
  • 自动生成 HALCON 采集代码

3.2 详细操作步骤

图像采集助手的典型使用流程如下:

  1. 启动图像采集助手。

    点击 菜单栏 "助手(Assistant)→ 打开新的图像采集(Open Image Acquisition)",或点击工具栏中的 摄像机(Camera)图标,打开图像采集窗口。

  2. 自动检测接口。

    在 "资源(Resources)" 选项卡中,点击 "自动检测接口 (Autodetect Interfaces)" 按钮,系统将扫描并列出当前可用的图像采集接口。

  1. 配置连接参数。

    在 "连接(Connect)" 选项卡中,选择并配置图像采集接口及设备信息,主要包括:

    • 接口库:HALCON 图像采集接口类型
    • 设备:相机设备 ID 或标识
    • 端口:输入端口 ID
    • 相机类型:相机或信号类型
    • 触发:是否使用外部触发
    • 分辨率:图像的宽度和高度
    • 颜色空间:RGB 或 灰度图
    • 位深:每个通道的位数
  2. 连接设备与采集图像。

    在 "连接(Connect)" 选项卡中,可以进行基本采集操作:

    • 点击 "连接(n)" 按钮建立与设备的连接,再次点击 "断开(D)" 关闭连接并释放设备。
    • 点击 "采集(S)" 按钮获取单帧图像。
    • 点击 "实时(v)" 按钮进行连续图像采集,再次点击 "停止(o)" 停止连续图像采集。
    • 点击 "检测(t)" 按钮检查当前参数配置是否有效。
    • 点击 "重置(A)" 按钮复默认参数设置。
  1. 设置采集参数。

    在 "参数(Param)" 选项卡中,可以对相机运行参数进行调整,包括曝光时间、增益等,不同设备支持的参数有所不同。

  2. 生成代码。

    在 "代码生成" 选项卡中,可设置采集方式并自动生成代码。

    • 控制流:初始化、采集单幅图像或循环采集图像;
    • 采集模式:同步模式或异步模式;
    • 变量名:自定义句柄与图像变量。
    • 自动断开连接:是否自动关闭设备连接。

点击 "插入代码" 按钮,即可将生成的 HALCON 代码插入到程序窗口中。

图像采集助手用于快速配置与调试,相应生成的代码可作为手动编程的参考与基础。在完成上述配置后,用户即可生成对应的图像采集代码,并用于实际开发。

四、图像采集流程

在完成图像采集硬件认知、接口配置及算子学习之后,本节给出一个完整的图像采集流程示例,将各步骤串联起来,形成从设备连接到图像获取的闭环。

4.1 标准采集流程

图像采集的标准流程如下:

  1. 设备连接。
  2. 参数配置。
  3. 图像采集。
  4. 图像显示或处理。
  5. 关闭设备。

用一句话来说,就是 "连接设备 → 配置参数 → 获取图像 → 释放资源"。

4.2 单帧采集示例(最小流程)

在上节中我们使用图像采集助手快速配置,生成了同步采集单幅图像的 HALCON 代码,并将代码插入到程序窗口中。这段代码就是完成单帧采集的最小流程,可以演示如何完成一次完整的图像采集过程。

为了更清晰地展示单帧采集的流程,我们在自动生成代码的基础上增加了参数设置与图像显示的内容。该流程适用于单次图像获取,常用于测试设备连接与参数设置是否正确。

完整代码如下。

c 复制代码
* Image Acquisition 01: 
* 1. 打开图像采集设备
open_framegrabber ('MediaFoundation', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', 'Monitor_Integrated_Webcam_#3_vid_05a9&pid_2641&mi_00#6&2cb53fca&1&0000', 0, -1, AcqHandle)
* 2. 设置采集参数(可选)
* set_framegrabber_param (AcqHandle, 'exposure_time', 10000)
* 3. 采集图像
grab_image (Image, AcqHandle)
* 4. 图像处理:显示图像
dev_display (Image)
* 5. 关闭设备
close_framegrabber (AcqHandle)

运行结果如下。

4.3 连续采集示例(实时采集)

在实际应用中,通常需要连续获取图像,实现实时处理:

(1)使用循环结构实现连续采集;

(2)每次采集后可进行显示或进一步处理;

(3)实际工程中应设置退出条件,避免死循环。

c 复制代码
* 1. 打开设备
open_framegrabber ('MediaFoundation', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', 'Monitor_Integrated_Webcam_#3_vid_05a9&pid_2641&mi_00#6&2cb53fca&1&0000', 0, -1, AcqHandle)

* 2. 设置参数(可选)
* set_framegrabber_param (AcqHandle, 'exposure_time', 10000)

* 3. 连续采集
while (true)
    grab_image (Image, AcqHandle)
    dev_display (Image)
endwhile

* 4. 关闭设备(通常需在循环外部控制退出条件)
close_framegrabber (AcqHandle)

4.4 异常处理

在实验环境中,图像采集程序通常可以稳定运行;但在实际工业应用中,长时间运行的系统可能会遇到设备断开、采集超时或通信异常等问题。因此,在连续采集流程中加入异常处理机制,是提升系统稳定性的重要措施。

图像采集过程中的异常通常包括:设备连接失败、采集超时、相机断开或通信中断。基本处理策略为:捕获异常 → 获取错误信息 → 延时重试 → 恢复运行。

在 HALCON 中,可以通过 try-catch 结构捕获运行时异常,并使用 get_error_text 获取错误码与错误信息。

示例如下:

c 复制代码
try
    open_framegrabber ('MediaFoundation', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', 'Monitor_Integrated_Webcam_#3_vid_05a9&pid_2641&mi_00#6&2cb53fca&1&0000', 0, -1, AcqHandle)
catch (ErrorCode)
    get_error_text (ErrorCode, ErrorText)
    disp_message (0, 'Error: ' + ErrorText, 'window', 10, 10, 'red', 'true')
    * 延时后重试
    wait_seconds (1.0)
    open_framegrabber ('MediaFoundation', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', 'Monitor_Integrated_Webcam_#3_vid_05a9&pid_2641&mi_00#6&2cb53fca&1&0000', 0, -1, AcqHandle)
endtry

在连续采集过程中,可以增加异常捕获与处理逻辑:

  1. 循环获取摄像头图像,获取成功时正常显示,失败时显示错误信息;
  2. 连续失败 3 次后自动退出并释放相机资源。

完整代码如下。

c 复制代码
open_framegrabber ('MediaFoundation', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', 'Monitor_Integrated_Webcam_#3_vid_05a9&pid_2641&mi_00#6&2cb53fca&1&0000', 0, -1, AcqHandle)

dev_get_window (WindowHandle)

* 初始化错误计数器
ErrorCount := 0
MaxRetries := 3

while (true)
    try
        grab_image (Image, AcqHandle)
        dev_display (Image)
        * 抓图成功,重置错误计数器
        ErrorCount := 0
    catch (Exception)
        * 获取并显示错误描述
        ErrorCode := Exception[0]
        get_error_text (ErrorCode, ErrorText)
        disp_message (WindowHandle, 'Grab Error: ' + ErrorText, 'window', 10, 10, 'red', 'true')
       
        * 增加错误计数
        ErrorCount := ErrorCount + 1
        wait_seconds (1.0)
        
        * 连续失败3次,退出循环
        if (ErrorCount >= MaxRetries)
            disp_message (WindowHandle, '连续失败 ' + MaxRetries + ' 次,退出程序', 'window', 40, 10, 'red', 'true')
            wait_seconds (2.0)
            break
        endif
    endtry
endwhile

close_framegrabber (AcqHandle)

异常处理是工业视觉系统的重要组成部分,通过引入错误捕获与重试机制,可以显著提升图像采集过程的稳定性与可靠性,使系统具备长期运行能力。

五、海康工业相机接入流程

海康(HIKROBOT)工业相机因其性价比高、稳定性好而被广泛使用。本章以海康 MV-CE100-30GM 工业相机为例,详细介绍从网络连接、MVS 调试到 HALCON 接入的完整流程。该相机为千兆网(GigE)接口,30 万像素,全局快门,最大帧率 7 fps。

5.1 网络连接与配置

5.1.1 硬件连接方式:

海康 GigE 相机与电脑的连接有两种常见方式:

连接方式 拓扑 适用场景
直连 相机 ← 网线 → 电脑网口 单台相机、调试环境、对带宽要求高
通过交换机 相机 ← 网线 → 交换机 ← 电脑 多台相机、需要同时上网

提示:

  1. 避免将相机与电脑同时接入普通家用路由器(尤其是百兆 LAN 口路由器),会导致 MVS 提示 "当前网络低于 1Gbps",并引发丢包而失败。
  2. 推荐用网线将相机与电脑直连,可以简化网络环境,便于调试。如果电脑需要访问互联网,可以通过 Wi-Fi 或第二块网卡上网。

5.1.2 电脑端 IP 配置(Windows):

GigE 相机与电脑通信需要处于同一网段。即 IP 地址的前三段数字相同,最后一段不同。例如,电脑 IP:192.168.3.100,相机 IP:192.168.3.127。

由于我们既要直连相机,又要通过 Wi-Fi 上网,推荐 电脑端 使用 "自动获取 IP + 备用配置" 的方式:

  1. 打开 控制面板 → 网络和共享中心 → 更改适配器设置。
  2. 右键点击用于连接相机的 以太网 → 属性。
  3. 双击 Internet 协议版本 4 (TCP/IPv4)。
  4. 在 "常规" 页面选择 自动获得 IP 地址(保证上网正常)。
  5. 在 "备用配置" 页面选择 "用户配置",填入:
    IP 地址:192.168.3.100
    子网掩码:255.255.255.0
    默认网关:留空
    点击 "确定" 保存。

这样,当相机直连时,电脑会自动启用 192.168.3.100 与相机通信;当拔掉相机网线后,电脑仍可通过 DHCP 正常上网。

5.1.3 相机端 IP 配置(通过 MVS 软件):

相机的 IP 需要手动设置为同网段的静态 IP:

  1. 打开 MVS 软件,刷新设备列表,在 "设备→GigE→以太网[192.168.3.100]" 列出了 MV-CE100-30GM 相机。
  2. 选中MV-CE100-30GM 相机(此时可能显示黄色感叹号,表示 IP 冲突或不在同一网段)。
  3. 点击菜单栏 "IP 配置工具",在 "IP 配置工具"页面点击 "修改 IP" 按钮,弹出 "修改 IP地址" 窗口。选择 静态 IP,并填写:
    IP 地址:192.168.3.127(或其它非冲突地址)
    子网掩码:255.255.255.0
    默认网关:192.168.3.1(直连时实际无效,仅用于通过校验)
    点击 "确定",相机将自动重启,黄色感叹号消失。

验证配置是否成功:在电脑上打开命令提示符,执行 "ping 192.168.3.127",收到回复表明连接成功。

5.2 MVS 配置与测试

MVS(Machine Vision Studio)是海康官方提供的相机调试软件,用于参数设置、图像采集和固件升级。

  1. 硬件连接:

    网线直连,使用一根千兆网线(超五类或六类)将相机与电脑的网口直接连接。

  2. 连接相机:

    (1)打开 MVS,在左侧 "设备列表" 中展开 "GigE-以太网" 节点,确认相机型号和序列号显示正常。

    (2)双击相机图标或点击 打开设备,图标变为绿色对勾表示连接成功。

  3. 采集验证:

    (1)单次采集:点击工具栏的 "单次运行" 按钮,若能成功获取一帧图像且无丢包提示,则相机工作正常。

    (2)连续采集:点击 "连续运行"(或 开始采集),观察实时图像流是否流畅。若图像连续更新且无卡顿或报错,则网络带宽满足连续采集需求。点击 "停止" 结束采集。

    至此,网线直连方式下的 MVS 配置与测试已完成闭环验证。

  4. 通过千兆交换机连接:

    将相机与电脑从直连改为同时接入同一台千兆交换机(注意:不要使用百兆路由器或百兆交换机)。重复采集验证操作,验证图像采集是否同样正常。

通过在 MVS 中完成相机连接和图像采集验证,确认了硬件链路(网线、网口、交换机)的千兆通信能力以及相机的基本采集功能,为后续在 HALCON 中调用相机提供了可靠的硬件基础。

5.3 HALCON 配置与测试

HALCON 通过 图像采集助手(Image Acquisition) 连接海康相机,底层依赖 MVS 安装时注册的 MVision 接口驱动。要使用 HALCON 连接海康相机,首先需要配置好专用的采集接口文件,之后即可在图像采集助手中进行连接和测试。

5.3.1 接口文件配置

Halcon 需要通过海康 MVS 软件提供的专用接口文件 hAcqMVision.dll 与海康相机建立连接。

  1. 找到接口文件:

    进入海康 MVS 软件的安装目录,找到 hAcqMVision.dll 文件。通常在以下路径:

    ".\Program Files (x86)\MVS\Development\ThirdPartyPlatformAdapter\HalconHDevelop"。

    根据 Halcon 版本选择对应的文件夹,例如 Halcon20\win64,即可找到 hAcqMVision.dll。

  2. 复制接口文件:

    将 MVS 安装目录中的 "hAcqMVision.dll" 文件复制到 Halcon 安装目录下的 "bin\x64-win64" 文件夹中。例如:

    ".\Program Files\MVTec\HALCON-24.11-Progress-Steady\bin\x64-win64"。

5.3.2 连接和配置相机

按照 3.2 的操作步骤,使用图像采集助手连接和配置相机。

  1. 在 HALCON 菜单栏选择 "助手 → 打开新的图像采集 (Image Acquisition)",打开图像采集窗口。

  2. 在图像采集窗口的 "资源(Resources)" 选项卡中,点击 "自动检测接口 (Autodetect Interfaces)" 按钮,系统应扫描到 "MVision" 接口,这正是由 "hAcqMVision.dll" 提供的。

    注意:如果没有复制 "hAcqMVision.dll" 接口文件,系统将无法识别和连接相机。

  1. 切换到 "连接" 选项卡,在 "接口库" 显示 "hAcqMVision.dll (Rev. 20.11.2)"。
    (1)从 "设备" 下拉列表中选中连接的相机型号 "MV-CE100-30GM",端口 ID 自动配置为 "0"。
    (2)点击 "连接(n)" 按钮建立与设备的连接。
    (3)点击 "采集(S)" 按钮即可获取单帧图像,这就完成了相机的接入和功能验证。

5.3.3 生成 HALCON 代码

  1. 切换到 代码生成 (Code Generation) 选项卡。

  2. 根据需求设置采集方式和模式(如"采集单幅图像"和"同步模式")。

  3. 点击 "插入代码" 按钮,即可将生成的 HALCON 代码插入到程序窗口中。

  4. 关闭图像采集助手,回到 HALCON 程序窗口,按 "F5" 运行程序,即可成功采集图像。

本章通过配置 HALCON 的采集接口,实现了在 HALCON 开发环境中对海康工业相机的调用与图像采集,为后续的算法开发提供了图像数据来源。

六、总结

图像采集全流程将设备连接、参数配置与图像获取有机结合,是实现工业视觉系统的基础步骤,通过掌握该流程,可以完成从"设备接入"到"数据获取"的完整闭环。

本文围绕 HALCON 中的图像采集过程,系统介绍了从设备接入到图像获取的完整流程。通过本章内容,你已经掌握了:

  • 图像采集的基本原理与硬件组成
  • 图像采集的核心算子
  • 图像采集助手的使用方法
  • 从连接到采集的完整流程实现

至此,你已经具备了将"相机设备接入系统并稳定获取图像"的能力,实现了从离线图像处理到实时图像获取的重要跨越。

下一步,将进入交互式绘图与 ROI 操作,学习如何在图像中选取感兴趣区域,为后续视觉处理与算法应用打下基础。

【本节完】

版权声明:

转发必须注明原文链接:

【HALCON 实战入门】3. 图像采集 (https://youcans.blog.csdn.net/article/details/160227452)

Copyright by youcans@qq.com 2026

Crated:2026-04

相关推荐
sghuter2 小时前
AI赋能CI/CD:Gemini实战脚本生成
开发语言·人工智能·ci/cd·青少年编程·r语言
深度学习lover2 小时前
<数据集>yolo 柑橘识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·柑橘识别
wechat_Neal2 小时前
2026AI+ 百人会
人工智能·汽车
FIT2CLOUD飞致云2 小时前
学习笔记丨基于MaxKB实现JumpServer堡垒机自动化巡检
人工智能·ai·开源·智能体·maxkb
captain_AIouo2 小时前
OZON运营全场景导入,Captain AI系统功能适配效果
大数据·人工智能·经验分享·aigc
Francek Chen2 小时前
【华为Pura90系列】新品发布:Pura 90系列影像领衔,Pura X Max开启大阔折叠新赛道
人工智能·华为·harmonyos·pura 90
CAE3202 小时前
基于Matlab Simulink的三轴运动平台刚柔耦合仿真
人工智能·matlab·模态·刚柔耦合·三轴运动
ACP广源盛139246256732 小时前
长距传输全能芯 @ACP#GSV5800 Type‑C/DP1.4/HDMI2.0 高速延长芯片
c语言·开发语言·网络·人工智能·嵌入式硬件·计算机外设·电脑
三维频道2 小时前
从物理断裂到数字孪生:三维 DIC 如何重构汽车轻量化的“成形边界”?
人工智能·数码相机·dic技术与数字孪生·成形极限flc测定·汽车轻量化制造·cae冲压仿真闭环·高强钢与复合材料