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

相关推荐
敏叔V58717 分钟前
AI智能体的工具学习进阶:零样本API理解与调用
人工智能·学习
2501_9418649638 分钟前
科学方法论破解学习时间堆砌误区
学习
傻小胖2 小时前
22.ETH-智能合约-北大肖臻老师客堂笔记
笔记·区块链·智能合约
1024小神2 小时前
SVG标签中path路径参数学习
学习
浅念-2 小时前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
ZH15455891312 小时前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
简佐义的博客2 小时前
生信入门进阶指南:学习顶级实验室多组学整合方案,构建肾脏细胞空间分子图谱
人工智能·学习
近津薪荼2 小时前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
rannn_1113 小时前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
qq_12498707533 小时前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计