资讯动态

Halcon实战:5个工业质检案例详解与排查经验

发布时间:2026/9/16 19:20:40 来源:尧图企业网站定制
之前有个客户把产线上一台检测设备的任务交到我手里要求用一个月把三个工位的视觉算法跑起来一个是卡簧是否漏装一个是密封圈表面有没有划伤还有一个是连接器Pin针的尺寸测量。那段时间我把Halcon的算子文档翻了个遍从Blob分析、亚像素边缘到模板匹配一步步在HDevelop里调通、打包成C#程序。现在回头看机器视觉项目翻来覆去就那几类套路找有没有、查好不好、测准不准。这篇文章我把最常用的5个工业质检案例整理出来每个都配了可直接运行的HDevelop代码代码的事我会讲细一点但真正值钱的其实是后面的选型思路和排查经验新入行的朋友建议整篇看完。很多刚接触机器视觉的人一听到Halcon以为它和OpenCV一样是开源的需要自己配置一堆环境。实际上Halcon是商业软件但它的杀手锏恰恰就在“开箱即用”这四个字上。采集图像、灰度变换、区域分割、形态学处理、亚像素轮廓提取、模板匹配这些工业场景里高频使用的算法都封装成了成熟的算子。你不需要从零开始调边缘检测的阈值也不需要研究Canny到底该用哪个sigma大部分工作就是把算子按正确顺序串起来然后把参数调到符合当前产线状态。这5个案例也不是随便选的。第一个缺件检测看的是区域面积和数量属于最基础的Blob分析第二个划痕检测依赖滤波和动态阈值是表面缺陷类需求的代表第三个尺寸测量用到了亚像素边缘和卡尺工具是测量类项目的骨架第四个字符和条码识别用到OCR分类器包装行业很常用第五个模板匹配是定位引导的核心机械手抓取、贴合对位都离不开它。把这些吃透市面上大多数常规质检项目你都能上手。1. 项目整体设计与案例选择思路1.1 为什么工业质检领域Halcon是主流选择我最早也是先学的OpenCVPython写起来确实方便但到了真正的工厂环境问题就来了。工业相机采集到的图像和网上下载的测试图完全两回事噪声大、光照不均、反光严重而且客户要的是稳定的检测结果和可追溯的日志不是你实验室里跑得挺好看的Demo。OpenCV当然也能做但很多底层算法要自己拼比如亚像素边缘提取、模板匹配细分度、相机标定、畸变校正这些在Halcon里都是一条算子的事而且文档和例程特别齐全。这里不是提倡无脑选商业软件而是说在项目交付周期短、现场验证环境复杂的情况下Halcon的成熟度能帮你把主要精力放在打光和ROI设计上而不是花一周时间去调边缘检测参数。另一个优势是Halcon对硬件的兼容性GigE Vision、USB3 Vision、Camera Link相机基本都有现成的采集接口SDK封装得很好产线上临时换个相机型号也不需要重写采集模块。HDevelop还可以直接连接到相机做实时调试图像效果不满意当场改阈值、改滤镜效率比写代码再运行高得多。1.2 五个案例的选型逻辑与实际场景我按检测类型把项目分成了四类有/无、好/坏、大/小、位置在哪。这四类基本覆盖了95%的机器视觉应用。下面这个表是整理好的场景对照实际谈项目时也可以按这个思路和客户沟通看对方到底想要的是什么结果。案例检测目标属于哪类核心算子推荐打光案例1 卡簧缺件检测判断卡簧是否漏装有/无threshold, connection, select_shape背光或高亮同轴光案例2 密封圈划痕检测找出表面划伤缺陷好/坏median_image, sub_image, dyn_threshold低角度环形光案例3 Pin针尺寸测量测量针脚间距和长度大/小edges_sub_pix, measure_pos背光平行光案例4 包装字符识别读取生产日期、条码内容识别find_text, do_ocr_multi_class_mlp同轴光或低角度光案例5 贴合定位引导找到目标位置和角度位置在哪create_shape_model, find_shape_model常规环形光选好场景之后下一步才是写代码。很多新手容易倒过来先写代码再调光结果图像质量不行算法怎么调都不稳定。我在项目中严格执行一个原则图像采集环节解决80%的问题算法只是把剩下的20%活干完。图像上如果连人眼都看不清特征算法再强也白搭。1.3 环境准备安装Halcon与License配置Halcon的安装本身不复杂从官网下载对应版本的安装包Windows环境下双击安装即可。安装完成会让选择HALCONROOT路径也就是安装目录后面写.devc和C#程序时都要引用这个目录里的库文件。建议装在默认路径省得后面环境变量出幺蛾子。License方面Halcon分为开发版和运行时版。开发版License用来在HDevelop里写算法、调参数需要连着加密狗或者用官方申请的试用License运行时版License是部署到客户现场用的程序发布时勾选Runtime文件夹一起发再让对方导入正式License。试用License一般只能跑30天但足够把项目从验证做到demo阶段。有一点必须提醒网上流传的破解版License很多已经失效还存在后门风险产线上用这种东西一旦出问题追责都说不清楚正规方法就是找代理或者原厂申请授权。安装完以后我建议先跑一下自带例程路径一般在HDevelop例程浏览器里搜索fuse、ball这些都是经典的Blob和形态学示例。把它们跑通了HDevelop里区域显示、灰度直方图、变量窗口这些基础操作也就顺手了。2. 核心细节解析与实操要点2.1 案例1缺件检测——Blob分析思维缺件检测听起来简单但实际产线上最容易翻车。比如卡簧是金属件在图像中和背景的灰度差可能不大或者相机角度有一点偏卡簧的反射光就变了。做这种检测的第一步不是急着分割而是想办法让“有”和“没有”的差异最大化。我一般优先选背光或同轴光。背光能形成高对比度的轮廓剪影有卡簧和没卡簧图像上的灰度变化非常明显同轴光适合表面有金属反光的场景它能消除环境光干扰。确定了打光之后再做图像预处理。使用threshold前我会用灰度直方图先看看目标和背景的灰度分布尽量把阈值设在两个峰之间的谷底。如果图像灰度受环境光影响大就要考虑灰度拉伸或者用局部阈值不能死守一个固定值。这个案例里最关键的一个技巧是分割后的连通域分析。threshold分割出来可能有噪声点也可能卡簧区域被分成好几块这时用connection把区域拆成独立连通域再用select_shape按面积、宽度、高度过滤掉干扰。判断“缺件”的标准不一定是区域面积为0更稳妥的是设置一个面积下限低于这个值就判定NG。比如正常卡簧面积为8000到12000像素只要小于5000就可以报缺件这样即使有一点噪声也不容易误判。2.2 案例2表面划痕检测——滤波和动态阈值配合划痕检测是工业视觉里比较典型又比较容易翻车的场景。难在工件表面本身就有纹理划痕和正常纹理的灰度差异有时候很小加上光照不均同一个划痕在图像暗部和亮部显示的对比度完全不同用固定阈值必然出问题。解决思路是把“低频背景”和“高频缺陷”分开。先对灰度图做中值滤波或高斯滤波得到一张没有划痕、只剩背景信息的平滑图然后用原图减去平滑图背景被抵消划痕、凹坑这些突变区域就凸显出来了。这一步叫做背景抑制是表面缺陷检测里的核心思想。差分后的图像再用threshold分割因为背景已经基本被抹平阈值会比直接在原图上选稳定得多。如果工件表面本身有大块灰度渐变差分后的图像边缘还是会有残差可以再加一个动态阈值dyn_threshold它会在局部邻域内比较原图和滤波图适应性更强。这里有一个很关键的参数滤波核的尺寸。核选小了正常纹理也被保留下来差分图里全是噪声核选大了细划痕也可能被一起抹平检测不出来。我的习惯是先用9×9或15×15的中值滤波试一轮如果背景还有明显纹理残留再往大调。另外形态学处理也不能漏划痕往往是细长条分割完会有断裂先做dilation_circle把相邻段连起来再用connection和select_shape按面积过滤微小噪点最后数一下区域数量大于0就判NG。2.3 案例3Pin针尺寸测量——亚像素和卡尺工具尺寸测量是机器视觉里精度要求最高的一类项目。这里说的精度不仅是像素精度还涉及硬件标定和镜头畸变。比如客户要求检测精度0.05mm用了500万像素相机拍摄20mm视野每个像素大概0.004mm理论精度够但实际还要考虑镜头畸变、安装倾斜、边缘模糊等因素。所以我建议凡是有绝对尺寸要求的项目都要用标定板把像素当量标定出来别拿相机标称分辨率拍脑袋算。Halcon做测量有个非常好用的工具测量卡尺。把一条细长矩形ROI放在待测边缘附近用gen_measure_rectangle2生成测量对象它会沿ROI垂直方向搜索灰度跳变点得到亚像素边缘位置。和直接用阈值找轮廓相比卡尺测量的优点是速度快、抗干扰强、重复精度高。求两条边之间距离时先分别测出两边的边缘坐标再用distance_pp算子算出距离再乘以标定好的像素当量就得到实际尺寸。用卡尺测量需要注意几个细节。ROI的宽度也就是卡尺的取样宽度要覆盖边缘附近足够范围的灰度变化太窄测不准太宽会引入旁边结构的干扰边缘极性要选对是从暗到亮还是从亮到暗选反了测出来的位置就偏了。还有拟合方式Halcon里有least_squares和tukey等tukey对离群点更鲁棒如果边缘上有毛刺优先用tukey。2.4 案例4字符和条码识别——模型文件是关键包装行业的质检经常要同时读生产日期、批号、二维码、条码。Halcon对一维条码和二维码的支持很好用create_bar_code_model配合find_bar_code调用非常简洁。真正要花心思的是OCR字符识别。Halcon里的OCR通常有两种用法一种是用自带训练好的工业字体模型识别印刷数字字母比如工业字符集Industrial_0-9A-Z_noRej适用范围广但遇到艺术字体和断笔字体时准确率会下降另一种是拿客户的样品自己训练OCR模型准确率高但前期要做标注和样本采集。在项目里我会先问客户要200张左右包含各种字符组合的现场图片用HDevelop的OCR训练工具切字符、标注、训练生成.omc文件。这样训练出来的模型对现场光照和字体风格更适应误识别率比通用模型低很多。重要提醒OCR识别结果输出的是一个字符串不要只判字符串是否为空项目验收时最好把识别结果直接和MES系统里的工单号比对一致才算OK这样能防止检错、漏检的问题。条码识别相对简单但要注意条码区域在图像里的占比。条码太小、像素不够或者条码被揉皱、反光、有遮挡都会导致解码失败。代码里我习惯用多个解码算法同时跑比如Code128和DataMatrix都试一遍然后校验结果格式再来判定。2.5 案例5贴装定位引导——模板匹配不可少定位引导常见于机械手抓取、贴装对位、上下料定位。给定一张模板图像在后续图像里找到最相似的位置并输出行列坐标和角度Halcon的基于形状的模板匹配在这块最常用。它不受灰度变化影响对旋转缩放也有很好的支持鲁棒性远高于单纯做Blob。创建模板时先用draw_rectangle2框选特征明显的区域注意模板不是选得越大越好区域大了匹配时间会成倍增加而且容易引入背景干扰。我会选工件上的一个明显拐角、圆孔或者十字线这类特征旋转后依然有区分度。创建模板时还要设置角度范围和缩放范围角度范围越大搜索空间越大时间也越长。如果工件旋转角度不确定先做粗匹配再加一个角度细化搜索这样速度能快不少。定位完成后一般会得到匹配中心的行列坐标和角度然后用vector_angle_to_rigid生成仿射变换矩阵把模板轮廓或机械手抓取点映射到当前图像坐标里。和机械手联动的标定通常还需要做手眼标定这部分涉及九点标定法如果大家后面需要我可以专门写一篇展开讲。3. 五个案例的完整HDevelop代码这里给的是我调试过的简化版本图像路径和阈值参数要根据现场图像替换。每个代码块都按HDevelop脚本格式写复制进去改掉read_image的路径就能跑。3.1 卡簧缺件检测完整代码* 卡簧缺件检测基于Blob分析 dev_open_window (0, 0, 640, 480, black, WindowHandle) read_image (Image, path/to/clip_image.png) rgb1_to_gray (Image, GrayImage) * 如果有背景纹理先用灰度拉伸增强对比度 min_max_gray (GrayImage, GrayImage, 0, 0, Min, Max, Range) scale_image (GrayImage, ScaledImage, 255.0 / (Max - Min 1), -Min) * 阈值分割阈值需要看灰度直方图来定 threshold (ScaledImage, Region, 90, 255) * 用形态学闭运算去除内部小孔 closing_circle (Region, RegionClosing, 5.5) connection (RegionClosing, ConnectedRegions) * 按面积筛选过滤噪声 select_shape (ConnectedRegions, SelectedRegions, area, and, 5000, 99999) count_obj (SelectedRegions, NumCards) * 面积统计用来判断是否缺件 area_center (SelectedRegions, Area, Row, Column) * 判断逻辑面积下限低于5000像素或区域数量不到1 if (NumCards 1 or Area 5000) disp_message (WindowHandle, NG: 卡簧缺件, window, 12, 12, red, true) else disp_message (WindowHandle, OK: 卡簧正常, window, 12, 12, green, true) endif这段代码的核心就是把“有”和“没有”转化成面积和数量两个特征。注意select_shape里的5000不是随手写的需要拿正常工件图片测出正常面积范围然后留出安全余量。比如正常面积是10000像素阈值可以设到5000防止个别正常工件因为轻微颜色差异被误判成缺件。3.2 密封圈划痕检测完整代码* 密封圈划痕检测中值滤波差分动态阈值 read_image (Image, path/to/seal_image.png) rgb1_to_gray (Image, GrayImage) * 中值滤波去除划痕得到背景图 median_image (GrayImage, ImageMedian, 9, 9, mirrored) * 原图和背景图差分突出划痕 sub_image (GrayImage, ImageMedian, ImageSub, 1, 128) * 用动态阈值在差分图上提取异常区域 dyn_threshold (ImageSub, ImageMedian, RegionDyn, 15, dark) * 膨胀连接断裂的划痕 dilation_circle (RegionDyn, RegionDilation, 3.5) connection (RegionDilation, ConnectedRegions) * 按面积过滤噪声划痕一般呈细长条面积不会太小 select_shape (ConnectedRegions, DefectRegions, area, and, 30, 99999) count_obj (DefectRegions, NumDefects) if (NumDefects 0) disp_message (WindowHandle, NG: 发现划痕, window, 12, 12, red, true) else disp_message (WindowHandle, OK: 表面干净, window, 12, 12, green, true) endif这里说一个我踩过的坑差分图里如果是亮的划痕dyn_threshold里要选dark还是light取决于差分方向。sub_image里第三、四个参数也就是多尺度和叠加值会影响差分结果的对比度。正常情况下划痕在原图中是暗的中值滤波后划痕变亮原图减滤波结果是负值加上128是为了把负值变成0到255范围这样dark区域才是划痕。如果发现提取出来的是背景而不是划痕把dyn_threshold的方向参数换成light或者在sub_image里把原图和滤波图对调这个要现场试。3.3 Pin针尺寸测量完整代码* Pin针间距测量亚像素边缘卡尺 read_image (Image, path/to/pin_image.png) rgb1_to_gray (Image, GrayImage) * 手动指定测量ROI也可以在HDevelop里用draw_rectangle2框选 Row : 200 Column : 300 Phi : 0.0 Length1 : 100 Length2 : 20 * 建立测量矩形取样宽度设为15像素 gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, 15, bilinear, MeasureHandle) * 在测量矩形内找边缘点 measure_pos (GrayImage, MeasureHandle, 1.5, all, all, RowEdge, ColumnEdge, Amplitude, Distance) * 求两根Pin针之间的距离 if (|RowEdge| 2) distance_pp (RowEdge[0], ColumnEdge[0], RowEdge[1], ColumnEdge[1], PixelDistance) * 像素当量由标定板标定得到单位mm/pixel PixelSize : 0.021 RealDistance : PixelDistance * PixelSize disp_message (WindowHandle, Pin间距: RealDistance mm, window, 12, 12, green, true) else disp_message (WindowHandle, NG: 边缘点不足, window, 12, 12, red, true) endif close_measure (MeasureHandle)measure_pos返回的RowEdge和ColumnEdge是按灰度跳变强度排序的边缘点序列。如果测量矩形里有多条边缘按顺序取前两个就行。如果边缘点很多说明ROI位置放得不对可能切到了Pin针的侧面弧线需要调整ROI的角度或位置。这里有个细节找完边缘一定要close_measure把测量句柄释放掉不然连续运行会内存泄漏现场跑一天后程序越来越卡问题往往就出在这。3.4 包装字符与条码识别完整代码* 条码识别Code128 read_image (Image, path/to/barcode_image.png) rgb1_to_gray (Image, GrayImage) * 创建条码模型 create_bar_code_model (auto, [], [], BarCodeHandle) * 设置条码占用像素的粗细范围根据实际图像微调 set_bar_code_param (BarCodeHandle, element_size_min, 2) set_bar_code_param (BarCodeHandle, element_size_max, 20) * 搜索条码并解码 find_bar_code (GrayImage, SymbolRegions, BarCodeHandle, Code128, DecodedDataStrings) if (|DecodedDataStrings| 0) disp_message (WindowHandle, 条码: DecodedDataStrings, window, 12, 12, green, true) else disp_message (WindowHandle, NG: 条码未识别, window, 12, 12, red, true) endif clear_bar_code_model (BarCodeHandle)OCR识别字符的代码相对复杂一点我把关键流程也放出来使用了Halcon自带的工业数字模型适合生产日期这类场景。* OCR读生产日期字符 read_image (Image, path/to/date_image.png) rgb1_to_gray (Image, GrayImage) * 读取工业字符模型 read_ocr_class_mlp (Industrial_0-9A-Z_NoRej.omc, OCRHandle) * 先把字符区域提取出来再逐字符识别 threshold (GrayImage, Characters, 0, 100) connection (Characters, ConnectedChars) select_shape (ConnectedChars, SelectedChars, [width,height], and, [4,8], [60,120]) * 识别字符 do_ocr_multi_class_mlp (SelectedChars, GrayImage, OCRHandle, Class, Confidence) * 输出识别结果字符串 RecognizedString : for i : 0 to |Class| - 1 by 1 RecognizedString : RecognizedString Class[i] endfor disp_message (WindowHandle, 识别结果: RecognizedString, window, 12, 12, green, true) clear_ocr_class_mlp (OCRHandle)如果你要做数字识别必须在精心选择照明方式的同时注意对比度。入门时如果打印质量好上面的字符区域提取没问题但如果在反光或残缺情况下就必须使用训练好的OCR模型。训练OCR需要准备样本代码上会花一些时间但在项目中很值得。3.5 装配定位引导完整代码* 模板匹配定位创建模板查找模板 * 第一步在模板图像上框选匹配区域创建模型 read_image (TemplateImage, path/to/template.png) draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2, ModelRow, ModelColumn, ModelPhi, ModelLength1, ModelLength2) gen_rectangle2 (ModelRegion, ModelRow, ModelColumn, ModelPhi, ModelLength1, ModelLength2) reduce_domain (TemplateImage, ModelRegion, ImageModel) * 创建形状模板角度范围设为-30到30度 create_shape_model (ImageModel, auto, rad(-30), rad(60), auto, auto, use_polarity, auto, auto, ModelID) * 获取模板轮廓便于显示 get_shape_model_contours (ModelContours, ModelID, 1) * 第二步在搜索图像中查找模板 read_image (SearchImage, path/to/search.png) find_shape_model (SearchImage, ModelID, rad(-30), rad(60), 0.7, 1, 0.5, least_squares, 0, 0.9, RowMatch, ColumnMatch, AngleMatch, Score) if (|Score| 0) * 计算仿射变换矩阵将模板位置映射到当前图像 vector_angle_to_rigid (ModelRow, ModelColumn, 0, RowMatch, ColumnMatch, AngleMatch, HomMat2D) affine_trans_contour_xld (ModelContours, TransContours, HomMat2D) * 显示匹配结果 dev_display (SearchImage) dev_display (TransContours) * 输出坐标和角度给机械手 disp_message (WindowHandle, X: ColumnMatch Y: RowMatch Angle: degrees(AngleMatch), window, 12, 12, green, true) else disp_message (WindowHandle, NG: 未找到目标, window, 12, 12, red, true) endif clear_shape_model (ModelID)模板匹配代码里create_shape_model一旦创建了一次如果量产时模板不变完全可以在初始化阶段创建并把ModelID保存到全局变量里后面每一帧只跑find_shape_model这样速度会快很多。模板图也不是越清晰越好反而要求轮廓稳定、角度特征明显。如果工件表面有反光建议不使用极性匹配选择ignore_global_polarity这样就算反光从亮变暗也照样能匹配上。4. 常见问题与排查技巧实录4.1 检测结果忽好忽坏先查图像稳定性项目现场出现的很多问题最后都发现不是算法的锅而是图像采集不稳定。比如相机帧率不够导致运动模糊光源亮度波动导致灰度漂移或者频闪灯光频率和相机曝光时间不匹配导致滚动条纹。遇到检测结果不稳定我的排查顺序是固定的先固定工件把连续采集的100张图保存下来在HDevelop里逐张看灰度直方图。如果直方图分布上下浮动超过20%优先解决光源和相机参数而不是调算法。光源控制器尽量选恒流型如果是频闪控制器要把触发信号和相机曝光严格同步。4.2 阈值怎么选都不对不要再硬调阈值新手在Blob分析时有个通病就是死磕threshold的参数。如果发现怎么调都分不干净很可能问题出在图像预处理或者打光方案上。比如工件表面有氧化色斑两个区域的灰度分布本身就重叠用全局阈值永远切不开。这时候要么换用打光角度创建更大对比度要么做灰度拉伸、同态滤波要么改用局部阈值dyn_threshold。记住阈值只是一个决策边界图像质量决定了边界可以放到哪。花一下午调阈值不如重新调整光源位置来得快。4.3 模板匹配慢或者误匹配模板匹配性能问题是现场最常见的投诉之一。匹配慢的优化方向有三个减小搜索角度范围、降低金字塔层数、缩小搜索区域。角度范围从0到360度改成-30到30度速度可以提升四倍以上金字塔层数设置为自动给一个最小的层数下限也会快很多。误匹配的根源大多是模板特征不明显或者工件表面出现了模板里没有的划痕和污点。这种情况我一般会把模板区域缩小只取工件上一个稳定的几何特征比如定位销孔、边缘拐角这样匹配的区分度会显著提高。4.4 和C#/C集成时的常见坑很多项目最后都要把HDevelop脚本封装成C#或者C程序这里的坑不少。第一个是变量类型HDevelop里的Tuple对应C#的HTuple字符串和数字都放在里面不能用普通的int直接接收否则会报转换错误。第二个是HObject资源的释放每帧图像和区域都占用内存如果在循环里反复生成新的HObject但不释放内存会一直涨二十分钟后开始卡顿。建议每次处理完调用Dispose或者用using语句管理。第三个是运行时License开发机的License不适用于客户现场部署时必须一并安装运行时License不然程序在客户机器上会闪退或者提示License错误。这几个坑我全踩过写出来给大家绕一下。4.5 图像偏暗或者过曝处理要趁早拿到一张图首先看灰度直方图是不是集中在0到255的某个窄区间。如果集中在0附近欠曝细节都在暗区里做边缘检测基本找不出可靠边缘如果集中在255附近过曝区域内部一片死白Blob分析会把亮斑连成一片计数和面积都会错。最简单的处理是调整相机曝光时间和增益增益尽量不要超过8dB不然噪声会成倍增加。如果现场没法大改硬件算法上也先用scale_image或equ_histo做直方图均衡把灰度范围拉开。注意均衡化会改变灰度映射关系做尺寸测量时只对用于观察的图像处理边缘提取之前要用原始图避免测量偏差。打光方案这块我再多说一句。很多刚入坑的朋友把大量时间花在算法上其实工业视觉项目的成败在打光阶段就定了一大半。背光适合轮廓和尺寸测量同轴光适合高反光平面上的字符和划痕低角度环形光适合金属表面的微小凹陷和纹理环形光适合常规缺陷和定位。做项目提案的时候最好先把手头的样品放到实验室打光台上实际试几种光源组合拍出对比图再决定用哪种。哪怕算法写得再差只要图像里特征清晰后面都有救。最后说个自己的习惯。我每做完一个项目都会把关键参数连同现场图像一起归档包括相机曝光、光源亮度、镜头光圈、阈值、滤波核尺寸、匹配分数下限这些。过两个月客户再打电话说误判多了翻出记录一看要么是光源衰减要么是产品批次换了材料很快就能定位问题。机器视觉调试是经验活记录越细回头越省事。这5个案例如果你能亲手跑一遍再改一改参数感受变化对Halcon和机器视觉的理解会上来一个台阶。后面我打算再写一篇关于相机标定和机械手引导的文章把九点标定和手眼标定讲透有兴趣的可以持续关注。完

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价