ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Halcon快速入门指南:从环境搭建到项目落地的完整路径

Halcon快速入门指南:从环境搭建到项目落地的完整路径 做视觉这行这么多年几乎每个月都会被问到同一个问题Halcon到底怎么入门。问的人有刚转行的应届生有从OpenCV转过来的软件工程师也有车间里负责设备维护、想往视觉方向走的老师傅。大家背景不同但困惑高度一致——手册太厚、术语太多、网上教程写得像天书好不容易跑通一个Demo换一张图就全废了。所以我决定把这份快速入门教程写成我平时带新人时讲的那套东西不堆概念直接从“装好能用”讲到“项目落地”每一个算子和流程都告诉你它是干嘛的、为什么要这样用、踩过什么坑。这篇东西适合刚拿到Halcon还没摸清方向的初学者也适合已经写了几个Demo但始终觉得没有系统感的人。1. 先说明白Halcon到底是什么为什么这么贵还有这么多人学1.1 先破除一个“贵”字心结为什么企业愿意为Halcon买单我没办法告诉你具体价格因为Halcon的License费用会随版本、授权方式和销售渠道浮动官方并不公开统一报价。但确实不便宜一套正版通常要数万起步而且按年订阅和永久授权的价差很大。很多初学者一听价格就想放弃。但你要分清楚两件事个人学习和企业项目商用是两码事。MVTec官网提供试用License可以用在非商业学习场景时间足够把整套入门流程跑完。真正上了项目由企业购买License之后你才有资格做商业交付这也是机器视觉行业默认的合规底线。有人会问OpenCV免费开源效果也不差为什么还要花这个钱我的回答是Halcon卖的从来不只是算法而是算法稳定性和工程效率。同样是模板匹配OpenCV里你要调一堆参数、自己处理金字塔和轮廓提取Halcon里一个create_shape_model加find_shape_model就能搞定而且亚像素精度、旋转缩放支持、复杂背景下的鲁棒性都经过大量工业场景验证。对设备厂商来说开发周期缩短带来的成本节省往往比License本身更可观。1.2 Halcon到底能干什么一张图看懂它的功能边界Halcon核心覆盖四块定位模板匹配、手眼标定、测量尺寸、角度、圆度、识别OCR、条码二维码、检测缺陷、瑕疵、表面异常。在这四块之上还有3D视觉深度图转点云、点云处理、深度学习目标检测、分割、分类等高级工具包。它不是一个通用图像处理库而是专门为工业机器视觉设计的“完整工具箱”。这意味着你不需要像用OpenCV那样为了一个缺陷检测自己去组合十几个基础函数Halcon通常直接给了你面向场景的成套方案。这也是为什么在汽车、电子、半导体、医药、物流这些行业里Halcon几乎是事实标准。1.3 学Halcon之前建议先建立一个认知Halcon的核心操作逻辑是“图像对象HObject 控制参数HTuple”两条线并行。图像数据走HObject数值和字符串走HTuple几乎所有算子都是“输入图像输入参数得到输出图像输出参数”的结构。你只要把这条主线搞清楚后面学任何算子都会很快。另外Halcon的脚本语言HDevelop语言非常简单语法上类似Pascal和Python的混合体没有面向对象也没有复杂的指针概念。真正花时间的是理解每个算子的适用场景和参数意义而不是语言本身。2. 环境搭建避坑指南下载、安装、License与HDevelop界面2.1 下载与安装选对版本比什么都重要Halcon的发布版本大致分两类Steady稳定版和Progress开发版。初学者直接选Steady版本别追新。Progress版本每周都会更新算法实现变化快网上能找到的资料多数对应Steady版本出了问题很难查。下载时注意操作系统和架构64位程序就装x64版本。Linux下安装更简单解压后执行install脚本然后配置环境变量即可。Windows下就是标准的下一步下一步但注意安装路径不要带中文和空格否则后面导出C代码时编译器链接会莫名其妙报错。2.2 License的三个常见坑网卡、系统时间和试用期限License这一关能卡住一半新手。第一个坑是Halcon的License绑定网卡MAC地址。很多人装完启动HDevelop提示“License not valid”一查发现是因为电脑同时开启了无线网卡和有线网卡Halcon默认认了其中一个而你申请License时填的是另一个MAC。解决方法是暂时禁用多余网卡或者申请License时就把所有网卡MAC都列上。第二个坑是系统时间。Halcon License对系统时间很敏感你把系统时间往前调License立刻失效往后调试用期又会被压缩。所以装完Halcon别手贱去改系统时间。第三个坑是试用License过期后重装系统也救不回来。试用License的有效期是从你申请那一刻开始算的卸载重装、换硬盘都没用只能在到期后重新申请新的试用授权如果MVTec政策允许的话。所以计划好学习周期别把试用期浪费在装环境上。2.3 HDevelop界面读懂四块区域就算入门一半HDevelop的界面初看很唬人但其实只需要关注四个区域算子窗口左侧列表所有算子按字母排序双击就能插入到程序里。程序编辑区中间区域写脚本的地方。每条语句都高亮显示输入输出参数。变量窗口右侧分“图像变量HObject”和“控制变量HTuple”所有中间结果都列在这里双击可以查看图像或数值。图形显示窗口最右侧或独立弹出的窗口dev_display会把图像显示在这里。我强烈建议你养成一个习惯每写一条算子立刻用F2键查看当前变量的值用鼠标中键在变量窗口点一下图像变量查看中间结果。这比任何调试器都直观也是HDevelop比VS里写C调Halcon高效率十倍的原因。一个非常有用的快捷键F5是执行到光标处F6是单步执行。调试复杂流程时我基本都是把断点打在可疑算子前一行然后按F5一段一段跑同时盯着变量窗口里的输出。3. 图像处理基本功读取图像、类型转换、灰度拉伸与磨砂面边缘增强3.1 读取图像与Halcon的数据类型HObject和HTuple必须分清任何Halcon程序几乎都以read_image开头read_image (Image, D:/images/product_01.png)这一句执行完变量窗口里会多出一个叫Image的图像变量。注意read_image的第二个参数是文件的路径在Windows里建议用正斜杠/不要用反斜杠\否则需要转义写起来烦死。Halcon的HTuple是万能容器既能存整数、浮点数也能存字符串和数组。比如read_image返回的图像宽高get_image_size (Image, Width, Height)Width和Height就是HTuple类型的整数变量。很多算子返回的不止一个值而是一组值HTuple会自动变成一个数组用select_range或索引就能取出某个元素。3.2 转整型、转实数搞清楚什么时候必须转搜索引擎里“halcon 转整型 实数”能成为热搜词说明这确实是新手最容易懵的地方。Halcon里很多算子的参数类型要求很严格你传错类型它不会自动帮你转只会报错。常见的转换算子有几个int_value : int(3.14159) // 转整型 real_value : real(3) // 转实数 str_value : 编号: 123 // 整数转字符串 int_from_string : strval(123, i) // 字符串转整数最典型的场景是区域面积转字符串显示在图像上area_center (Region, Area, Row, Column) disp_message (WindowHandle, 面积: Area, window, 0, 0, black, true)这里Area是整数类型直接拼接到字符串里Halcon会自动转换不需要手动调int_to_string。但如果你要把它传给一些严格要求实数类型的算子比如set_font的字号就得先real(Area)。3.3 灰度值拉伸算子让对比度低到“看不见”的图像现出原形很多工业现场的图像对比度很差尤其是磨砂面、暗光下的塑料件、金属拉丝面。这时候直接做边缘提取或者模板匹配结果一塌糊涂。灰度拉伸是预处理的第一步也是性价比最高的一步。常用的拉伸算子有两类scale_image_max自动将图像的灰度范围拉伸到0-255不需要参数最适合看效果。scale_image (Image, ImageScaled, Mult, Add)手动线性拉伸灰度值乘以Mult再加Add。实际项目中我更喜欢scale_image配合min_max_gray使用min_max_gray (Region, Image, 0, Min, Max, Range) scale_image (Image, ImageScaled, 255.0 / (Max - Min), -255.0 * Min / (Max - Min))这段的意思是先求出图像里灰度最小值Min和最大值Max然后把整个灰度范围映射到0到255。Mult是缩放系数Add是平移量。这样拉伸后原本灰蒙蒙的磨砂面会变得黑白分明边缘特征一下就出来了。3.4 磨砂面提取边缘特征别一上来就Canny如果你拿磨砂面直接做边缘提取会得到一堆噪声因为这些表面的颗粒纹理本身就产生大量微小灰度变化。正确的思路是先模糊或中值滤波抑制表面纹理再做灰度拉伸最后才做边缘提取。推荐的算子链是median_image (Image, ImageMedian, 5, circle) // 中值滤波去除颗粒噪声 scale_image_max (ImageMedian, ImageScaled) // 灰度拉伸增强对比度 edges_sub_pix (ImageScaled, Edges, canny, 1.5, 20, 40) // 亚像素边缘提取这里median_image的半径参数5是关键选太小了噪声滤不掉选太大了边缘位置会偏移。磨砂面处理时我一般从5到9之间调优先保证边缘连续再考虑精度。edges_sub_pix里1.5是高斯平滑系数相当于阈值20和40分别是低阈值和高阈值。这两个阈值的经验是低阈值设为高阈值的一半左右效果通常比较自然。拿到Edges后可以用select_contours_xld按长度过滤掉短噪声段select_contours_xld (Edges, EdgesFiltered, length, 20, 99999, -0.5, 0.5)4. 必学三大件模板匹配、尺寸测量与OCR识别4.1 模板匹配的完整套路从create到find的一整套流程模板匹配是Halcon里用得最多的功能也是“halcon模板匹配”热搜词背后的核心需求。完整套路分四步。第一步截取模板区域。用gen_rectangle1或者draw_rectangle1框出一个ROI这个区域要尽量包含目标物的显著特征避免大面积的均匀背景。draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2) reduce_domain (Image, Rectangle, ImageReduced)第二步创建模板。这是核心步骤create_shape_model (ImageReduced, auto, -10, 20, auto, auto, ignore_local_polarity, 5, 7, ModelID)几个参数的解释按我的经验说人话第二个和第三个参数是搜索角度范围和步长-10到20表示模板支持从-10度到20度旋转ignore_local_polarity表示忽略局部对比度方向反转适合光照会变的场景但匹配速度会慢一点5是金字塔层数层数越多匹配越快但层数过高会导致小目标丢失7是最小对比度低于这个灰度对比度的特征不会被提取。第三步保存模板。项目里肯定不能每次启动都重新创建模板。write_shape_model (ModelID, model.shm)一行搞定下次运行用read_shape_model加载。第四步匹配。也是大家最熟悉的部分find_shape_model (Image, ModelID, -10, 20, 0.6, 1, 0.5, least_squares, 0, 0.9, Row, Column, Angle, Score)这里0.6是最低匹配分数0.9是最大重叠度重叠度小于0.9的匹配结果允许被返回。匹配结果里Row、Column、Angle、Score分别对应位置、角度和相似度。我踩过的坑如果发现匹配出来的位置偏移先检查创建模板时的auto参数是否自动选择了过多干扰特征。试着手动指定金字塔层数比如把auto改成5或者缩小截取区域往往立竿见影。4.2 尺寸测量边缘提取 卡尺测量的完整流程“halcon测量”和“halcon尺寸测量”是搜索热度很高的关键词。测量场景差别很大有的是测宽度有的是测圆径有的是测两个孔之间的距离。但核心思路是一致的你需要一条测量线或测量区域沿着它找边缘然后算距离。以最常见的“测量工件宽度”为例* 1. 画出测量区域 draw_line (WindowHandle, StartRow, StartCol, EndRow, EndCol) gen_measure_rectangle2 (StartRow, StartCol, \ atan2(EndRow - StartRow, EndCol - StartCol), \ dist_pp(StartRow, StartCol, EndRow, EndCol), 5, \ Width, Height, nearest_neighbor, MeasureHandle) * 2. 执行测量 measure_pos (Image, MeasureHandle, 0.5, 30, all, all, RowEdge, ColumnEdge, Amplitude, Distance) close_measure (MeasureHandle)gen_measure_rectangle2创建了一个沿给定方向的测量矩形长度是起点到终点的距离宽度是5像素。measure_pos在上面找出灰度变化剧烈的位置RowEdge和ColumnEdge就是边缘坐标。要算两个边缘之间的距离用distance_ppdistance_pp (RowEdge[0], ColumnEdge[0], RowEdge[1], ColumnEdge[1], Distance)一个非常实用的经验测量场景中必须先用标定结果把像素距离换算成物理距离。Halcon里最方便的方式是set_origin配合calibration参数或者简单一点先量出已知物体的像素宽度和物理宽度算出像素当量如0.05mm/pixel再乘到所有测量结果上。这个“像素当量法”虽然不如完整标定精确但对大多数二维测量项目已经够了。4.3 OCR训练一个自己的字库识别率才靠谱很多人一上来就用Halcon自带的read_ocr_class_mlp和预训练字库结果识别率惨不忍睹。原因很简单工业场景里的字符如喷码、激光打标、点阵字符和标准印刷体差异太大预训练模型根本没见过。所以正确的做法是基于自己的样本训练字库。基本流程* 1. 采集样本图像分割出单个字符区域 read_image (Image, char_sample.png) threshold (Image, Region, 80, 255) connection (Region, ConnectedRegions) sort_region (ConnectedRegions, SortedRegions, character, true, row) * 2. 创建OCR训练文件 write_ocr_trainf (SortedRegions, Image, my_chars.trf) * 3. 在HDevelop中手动标记每个字符的标签 * 4. 创建并训练分类器 create_ocr_class_mlp (8, 10, constant, default, 0.01, 0.01, OCRHandle) trainf_ocr_class_mlp (OCRHandle, my_chars.trf, 200, 1, 0.01, Error) write_ocr_class_mlp (OCRHandle, my_ocr_mlp.omc)字符分割这一步是最容易出问题的。点阵字符、字符粘连、背景纹理干扰都会导致分割错误。我的经验是先threshold粗分割再用opening_circle或者connection做精细处理必要时手动画框补上漏掉的字符。宁可多标几十个样本也不要急着训练样本越干净识别率波动越小。5. 进阶玩法缺陷检测、3D点云与图像标注5.1 缺陷检测的几种常用思路“halcon缺陷检测”是很多项目方的直接需求。但请你务必记住Halcon没有万能缺陷检测算子不同缺陷用不同思路。我平时给新人讲大致分三类。第一类是斑点类缺陷划痕、脏污、凸点适合用Blob分析。核心是找到图像中灰度与背景不同的区域threshold (Image, DarkRegion, 0, 80) // 提取暗色缺陷 opening_circle (DarkRegion, RegionOpening, 3.5) // 去掉细小的噪声点 connection (RegionOpening, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, area, and, 50, 99999)第二类是纹理类缺陷磨砂面上的划痕、布料上的断纱单纯阈值没用必须结合滤波和频域方法。我自己常用的是gen_gabor_filter做Gabor滤波或者用fft_generic做傅里叶变换后在高频段找异常。这需要一些信号处理基础但也正因为门槛高做出来的方案才不容易被抄。第三类是深度学习缺陷检测。如果你用过Halcon的深度学习工具MVTec Deep Learning Tool会发现它内置了分类、目标检测、语义分割三类任务。对于人眼也说不清“什么样算缺陷”的应用场景比如锻件表面裂纹老方法无从下手正好交给深度学习模型自己学特征。Halcon 19.11之后的版本对深度学习的支持已经很好了read_dl_model加apply_dl_model两个算子就能跑推理。但要注意训练阶段的标注工作量和数据量很现实别指望几十张图就出奇迹至少准备几百张带标注的样本。5.2 深度图转点云从2.5D到3D的一步之遥“halcon 深度图转点云”能上热搜说明做3D视觉的人越来越多了。深度图本质是一张单通道图像每个像素的灰度值代表该点的深度值单位通常是毫米。Halcon转点云的坐标关系很直接核心就是知道相机的内参。* 读入深度图 read_image (DepthImage, depth_scan.tiff) * 创建3D相机模型设置内参 create_cam_par_look_around (0.008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, sqrt, CamParam) set_origin (CamParam, -0.03, 0, 0.2) // 设置相机相对测量基准的位置 * 深度图转点云 xyz_to_object_model_3d (DepthImage, CamParam, ObjectModel3D)这里create_cam_par_look_around里的前几个参数分别代表焦距、主点坐标和畸变系数。这些参数在多相机标定或者出厂标定里能拿到。如果只是搭个Demo看效果可以用create_cam_par_area_scan_division (0.012, 0, 0, 0, 0, 0, 0, division, CamParam)这种简化模型占个位。转出来的ObjectModel3D可以保存在硬盘上write_object_model_3d (ObjectModel3D, ply, point_cloud.ply, [])注意深度图转点云最怕的是深度图本身有噪点和空洞。转之前先用median_image做一次滤波再用smooth_object_model_3d平滑点云效果会好很多。别指望点云质量能靠后面的算法救回来源头质量差后面怎么做都费劲。5.3 在图片上写文字调试标注时最常被问的小功能“halcon可以在原图上写文字吗”“halcon在图片写入文字”这两个热搜词我猜都是被调试时“想在测试图上做标记”的需求逼出来的。答案是可以的而且方式不止一种。最简单的方式是用disp_message在窗口上显示但它是显示在图像窗口上的临时文字不会写进图像数据里。如果你要把文字“烧”进图像文件比如给生产追溯系统输出带钢印号的图片用write_string配合get_font来画* 创建专门用于文字的图像区域 gen_image_const (TextImage, byte, 512, 256, 0) set_font (TextImage, Arial-Bold-24) write_string (TextImage, SN: 2024-0715-001) * 把文字区域叠加到原图上 overpaint_gray (Image, TextImage, 0, 0)set_font的第二个参数是字体描述不同平台支持的字体名不一样。Windows下我用得最多的是Arial-Bold-24这种格式前面是字体名后面是字号。如果中文字体显示乱码多半是字体描述里没指定中文字体可以试试SimHei-Bold-24。overpaint_gray的作用是用文字图像覆盖原图上的对应区域。要注意的是第三个和第四个参数是覆盖的起始行列坐标别把关键检测区域盖住了。6. 项目落地C/Qt/C#调用Halcon、DLL导出与手眼标定6.1 为什么实际项目里几乎都是“导出DLL”而不是“直接调脚本”很多人第一反应是想在Qt或VS里直接调用Halcon脚本或者照着HDevelop代码一句句翻译成C。这两种方式都有问题。HDevelop脚本在运行时依赖解释器效率不够一句句翻译成C工作量巨大而且调试不变。实际项目里最主流的方式是在HDevelop里写好并调试好流程然后用“导出DLL”的方式生成一个封装好的函数库供C、Qt或C#调用。这个思路对一个新项目的落地来说效率最高回头维护也方便。6.2 在VS中直接用C编写Halcon程序的两种姿势如果你确实需要直接在VS里写C程序比如你的业务逻辑本身很复杂封装成DLL反而不灵活大致有两种姿势。姿势一链接Halcon静态库。在VS工程里添加Halcon的include目录和lib目录然后链接halcon.lib。这是最传统的方式所有算子都要通过HObject和HTuple来传参。面向对象封装时我喜欢把一套检测流程封装成一个类#include HalconCpp.h class SurfaceInspector { public: SurfaceInspector() { HDevelop::SetSystem(filename_encoding, utf8); } bool LoadModel(const std::string modelPath) { try { HalconCpp::ReadShapeModel(modelID_, modelPath.c_str()); return true; } catch (HalconCpp::HException e) { return false; } } void FindPart(const HalconCpp::HObject inputImage, HalconCpp::HTuple* row, HalconCpp::HTuple* column) { HalconCpp::FindShapeModel(inputImage, modelID_, -10, 20, 0.5, 1, 0.5, least_squares, 0, 0.9, row, column, angles_, scores_); } private: HalconCpp::HTuple modelID_; HalconCpp::HTuple angles_; HalconCpp::HTuple scores_; };用类封装的好处非常明显业务代码里不需要关心Halcon的数据类型细节只需要传入图像、拿回结果。团队的其他人不需要懂Halcon也能维护视觉逻辑。姿势二HDevelop导出C代码。在菜单“文件-导出程序”里选语言为CHDevelop会自动生成一个.cpp和.h文件里面包含一个与脚本逻辑对应的函数。然后你在自己的工程里调用这个函数即可。这种方式适合“逻辑已经跑通想快速集成”的场景。6.3 Qt和C#怎么调用Halcon一条实用路线先回答“qt怎么调用halcon”。Qt里调用Halcon的方式和VS里基本一样只需在.pro文件里指定Halcon的头文件和库目录INCLUDEPATH C:/Program Files/MVTec/HALCON-24.05/include LIBS -LC:/Program Files/MVTec/HALCON-24.05/lib/x64-win64 -lhalcon然后在代码里#include HalconCpp.h就可以像上一节那样使用了。唯一的Windows小坑是如果提示找不到hcanvas.dll或halcon.dll记得把Halcon的bin/x64-win64加到系统PATH里。C#这边更简单。Halcon官方提供.NET接口在VS里添加引用引用管理器 - 浏览 - C:/Program Files/MVTec/HALCON-24.05/bin/dotnet35/halcondotnet.dll然后就可以用C#的面向对象语法调用using HalconDotNet; HImage image new HImage(D:/images/test.png); HShapeModel model new HShapeModel(); model.ReadShapeModel(model.shm); HTuple row, column, angle, score; model.FindShapeModel(image, -10, 20, 0.6, 1, 0.5, least_squares, 0, 0.9, out row, out column, out angle, out score);需要注意的是C#调用时HObject对象的释放是个常见问题密集调用时如果忘掉Dispose()或Gc.Collect()内存会一路飙升。我建议封装一个using块using (HImage img new HImage(...)) { ... }能帮你省掉很多烦心事。6.4 手眼标定眼在手上还是眼在手外流程各不同“halcon手眼标定”和“halcon眼在手上标定”是热搜词也是从“会算子”到“能做项目”之间的一道坎。先说概念眼在手上Eye-in-Hand相机装在机械臂末端相机跟着机器人动。眼在手外Eye-to-Hand相机固定安装在工位上方机械臂在相机视野里工作。两种情况的标定目标不同但标定板板都绕不开calibrate_hand_eye这个算子。眼在手上的标准流程把标定板固定在相机视野内放在工作台或夹具上移动机械臂到多个不同姿态每个姿态记录当前机械臂末端位姿X、Y、Z、Rx、Ry、Rz同时拍一张标定板图像。在HDevelop里读入图像和位姿数据逐张提取标定板角点。调用calibrate_hand_eye求出相机坐标系到机械臂末端坐标系的变换关系。* 读取标定板图像 read_image (Image1, calib/pose_01.png) read_image (Image2, calib/pose_02.png) read_image (Image3, calib/pose_03.png) * 提取标定板角点 find_calib_object (Image1, CalibHandle, 0, 0, 0, [], []) find_calib_object (Image2, CalibHandle, 0, 0, 0, [], []) find_calib_object (Image3, CalibHandle, 0, 0, 0, [], []) * 设置机械臂位姿单位角度这里每个Pose对应一次拍摄时的机械臂末端位姿 Pose1 : [x1, y1, z1, rx1, ry1, rz1, 0] Pose2 : [x2, y2, z2, rx2, ry2, rz2, 0] Pose3 : [x3, y3, z3, rx3, ry3, rz3, 0] * 标定 calibrate_hand_eye ([Pose1, Pose2, Pose3], moving, HandEyeResult)这里第二参数字符串有两类moving对应眼在手外stationary对应眼在手上。具体含义可以参考官方帮助文档但最容易记的方法就是相机装在机器人上选moving相机固定不动选stationary。标定的实操心得至少采集15到20组姿态千万不要只拍5、6张就急着标定。姿态之间要有较大的角度变化最好覆盖机械臂工作空间的不同高度和方位。如果标定误差一直很大重投影误差大于0.5像素先检查标定板有没有贴平再怀疑姿态数据有没有记录错。7. Halcon、OpenCV和Vision Master怎么选说点我自己的偏好吧“opencv halcon vision master检测框架选择”这个热搜词几乎是每个视觉工程师都会纠结的终极问题。我给不了你“选A一定对”的答案但可以分享一套判断标准。什么时候选OpenCV预算紧张、团队里有深厚图像处理算法背景的人、项目对尺寸测量和模板定位精度要求没那么高、且大量依赖自研算法的场景。OpenCV上限极高但下限也极低——它是一堆乐高零件能不能拼出好产品完全看你的手艺。如果你能接受长时间开发和调参OpenCV是性价比之选。什么时候选Halcon项目周期紧、检测难度高复杂表面缺陷、亚像素测量、3D视觉、设备需要长期稳定运行、团队里算法背景不一定很强。Halcon把很多工业场景里已经验证过的经验封装好了你调用的是MVTec几十年的工业视觉积累。授权贵但省下来的开发时间通常能覆盖这个成本。什么时候选Vision Master据我了解Vision Master是国内机器视觉厂商推出的软件平台主打图形化拖拽、低代码适合产线人员快速搭建方案。优势是上手极快可视化配置界面友好但它的扩展性不如Halcon算法深度和算子丰富度也有差距。定位很清晰它是要给那些不想深扒算法、追求快速部署的场景用的。如果你做的项目简单直接、没有太多非标需求Vision Master确实能省事很多。我的建议是三句话有预算选Halcon有算法团队选OpenCV项目简单追求部署速度选Vision Master。但如果你想在这个行业里长期发展HalconOpenCV都值得学因为前者培养你对工业视觉体系的完整认知后者培养你从底层原理解决问题的能力。两条腿走路在不同项目里你都会有底气。写到这里Halcon快速入门需要覆盖的东西基本都齐了。如果你照着装好了环境、跑通了模板匹配和尺寸测量再走一遍手眼标定和DLL导出那你已经超过大部分入行一两年的人。剩下的就是在真实项目里一遍遍踩坑把这些流程变成自己的肌肉记忆。如果这篇文章里有哪段对你有用或者你自己踩过什么比较冷门的坑欢迎交流我后续也会针对具体算子做更细的拆解。
返回列表