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

相关推荐
CoovallyAIHub3 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub3 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub3 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub3 天前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub3 天前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
starlaky5 天前
Django入门笔记
笔记·django
勇气要爆发5 天前
吴恩达《LangChain LLM 应用开发精读笔记》1-Introduction_介绍
笔记·langchain·吴恩达
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
勇气要爆发5 天前
吴恩达《LangChain LLM 应用开发精读笔记》2-Models, Prompts and Parsers 模型、提示和解析器
android·笔记·langchain