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)等。

相关推荐
zcg19429 小时前
raw域噪声到底怎么建模
计算机视觉
Byron Loong9 小时前
【机器视觉】标注软件 labelMe和lableImg对比
yolo·计算机视觉
sensen_kiss9 小时前
CAN302 Technologies for E-Commerce 电子商务技术 Pt.6 市场营销与SEO(搜索引擎优化)
android·学习·搜索引擎
我的xiaodoujiao9 小时前
API 接口自动化测试详细图文教程学习系列9--Requests模块
python·学习·测试工具·pytest
乐园游梦记9 小时前
机器学习:监督学习与无监督学习由浅入深全解析
人工智能·深度学习·学习·机器学习
bobasyu9 小时前
Claude Code 源码笔记 -- queryLoop
java·笔记·spring
woai33649 小时前
JVM学习-基础篇-常见引用
jvm·学习
世人万千丶9 小时前
Flutter 框架跨平台鸿蒙开发 - 家庭健康档案云应用
学习·flutter·华为·开源·harmonyos·鸿蒙
東雪木10 小时前
Java学习——泛型基础:泛型的核心作用、泛型类 / 方法 / 接口的定义
java·学习·java面试
这张生成的图像能检测吗10 小时前
(论文速读)UWDET:基于物联网的资源有限水下目标探测训练增强
人工智能·深度学习·物联网·目标检测·计算机视觉·水下目标检测