Halcon 学习笔记

一、Halcon 简介

Halcon 是由德国 MVTec 公司开发的机器视觉算法库,专注于图像处理与分析,广泛应用于工业检测、医疗成像、机器人视觉等领域。其核心优势包括:

  • 功能全面:涵盖图像获取、预处理、分割、特征提取、识别、测量等全流程算法。

  • 跨平台性:支持 Windows、Linux、macOS 等系统,可与 C/C++、C#、Python 等语言集成。

  • 灵活性:提供交互式开发环境 HDevelop,支持算法快速原型设计,再导出为目标语言代码。

  • 高性能:针对大规模图像和实时场景优化,支持多核计算、GPU 加速。

二、核心概念与数据类型

  1. 图像(Image)

    存储像素数据的对象,支持单通道(灰度图)、多通道(RGB 等),数据类型包括 byte(0-255)、uint2(16 位无符号)等。

    • 变量类型:Hobject(Halcon 通用对象类型,可存储图像、区域等)。
  2. 区域(Region)

    由连通像素组成的集合,是 Halcon 中特有的概念,用于表示图像中的感兴趣区域(ROI)。

    • 常用操作:阈值分割(threshold)、连通域提取(connection)、形态学运算(erosion/dilation)等。
  3. 其他关键类型

    • Hlong:Halcon 长整型,用于计数、索引等。

    • HTuple:动态数据容器,可存储数值、字符串等,方便参数传递。

三、基本工作流程

  1. 图像获取:读取本地图像或从相机采集。

  2. 预处理 :去噪(mean_image)、增强对比度(emphasize)等。

  3. 区域分割:通过阈值、边缘检测等提取目标区域。

  4. 特征分析:计算区域的面积、周长、中心坐标等。

  5. 结果输出:显示、计数或控制外部设备。

四、示例代码(C++ 接口)

以下示例实现 "PCB 图像中焊点计数",流程为:读取图像 → 阈值分割 → 提取连通域 → 统计数量 → 显示结果。

复制代码
#include "halconcpp.h"
#include <stdio.h>
using namespace HalconCpp;
​
int main() {
    try {
        // 1. 读取图像(假设 "pcb_image.png" 为待处理图像)
        HObject img;
        ReadImage(&img, "pcb_image.png");  // Halcon 函数名首字母大写(C++ 接口规范)
​
        // 2. 预处理:平滑去噪(减少干扰)
        HObject smooth_img;
        MeanImage(img, &smooth_img, 3, 3);  // 3x3 均值滤波
​
        // 3. 阈值分割:提取灰度值 50~150 的区域(假设焊点在此范围)
        HObject region;
        Threshold(smooth_img, &region, 50, 150);
​
        // 4. 提取连通域:将独立焊点作为单独区域
        HObject connected_regions;
        Connection(region, &connected_regions);
​
        // 5. 统计区域数量(焊点数量)
        Hlong num_solder;
        CountObj(connected_regions, &num_solder);
        printf("PCB 焊点数量:%ld\n", num_solder);
​
        // 6. 显示结果(需配合 HDevelop 或自定义窗口)
        HWindow wnd(100, 100, 800, 600);  // 创建窗口(x, y, 宽, 高)
        DispObj(img, wnd);                // 显示原图
        wnd.SetColor("red");              // 设置区域颜色
        DispObj(connected_regions, wnd);  // 叠加显示连通域
        wnd.Click();                      // 等待鼠标点击再关闭
​
    } catch (HException &e) {
        // 异常处理:打印错误信息
        printf("错误:%s\n", e.ErrorMessage());
        return 1;
    }
    return 0;
}

五、常见问题与解决

  1. 图像读取失败:检查路径是否正确,图像格式是否支持(Halcon 支持 bmp、png、jpg 等)。

  2. 阈值参数不合适:可在 HDevelop 中通过交互式调整阈值,再将参数应用到代码。

  3. 区域噪声多 :增加预处理步骤(如中值滤波 MedianImage)或形态学开运算(OpeningCircle)去除小区域。

六、扩展学习资源

  • 官方文档:安装目录下的 help 文件夹(含详细函数说明)。

  • 工具:HDevelop(交互式调试,自动生成代码)。

  • 应用场景:字符识别(OCR)、尺寸测量(MeasurePos)、缺陷检测(Difference)等。

相关推荐
fanged2 小时前
前端的调试(TODO)
笔记
强子感冒了8 小时前
Java网络编程学习笔记,从网络编程三要素到TCP/UDP协议
java·网络·学习
Quintus五等升8 小时前
深度学习④|分类任务—VGG13
人工智能·经验分享·深度学习·神经网络·学习·机器学习·分类
二哈喇子!8 小时前
Java框架精品项目【用于个人学习】
java·spring boot·学习
飞Link9 小时前
深度解析 MSER 最大稳定极值区域算法
人工智能·opencv·算法·计算机视觉
Mixtral9 小时前
2026年4款学习转写工具测评:告别逐字整理,自动生成复习资料
笔记·学习·ai·语音转文字
鄭郑9 小时前
【playwright 学习笔记】原理讲解与基础操作 --- day01
笔记·学习
2301_810746319 小时前
CKA冲刺40天笔记 - day10 K8S namespace
笔记·容器·kubernetes·k8s
Yu_Lijing10 小时前
基于C++的《Head First设计模式》笔记——模式合作
c++·笔记·设计模式
代码游侠10 小时前
学习笔记——时钟系统与定时器
arm开发·笔记·单片机·嵌入式硬件·学习·架构