C#联合Halcon开发的通用视觉框架,适合初学者使用

C#联合halcon开发的通用视觉框架,可供初学者使用

打开Visual Studio新建一个C#项目,拖入那个灰底黄框的HWindowControl控件,这玩意儿就是咱们和Halcon交互的主战场。别急着写代码,先想清楚视觉项目的通用套路------相机控制、图像处理、结果显示三大模块得拆明白。

框架里我最得意的CameraController类,封装了海康、Basler这些常见相机的SDK。看这段初始化代码:

csharp 复制代码
public void Connect(string cameraSN, int timeout = 3000)
{
    _hwCamera = new HCamera("GigEVision2", 0, 0, cameraSN);
    _hwCamera.OpenFramegrabber();
    _isConnected = _hwCamera.IsOpen();
}

参数验证和异常处理被我藏在内部方法里,新手调用时只需要传相机序列号就行。注意那个OpenFramegrabber可能抛出的HalconException,框架里用统一错误码处理,比原生的HOperatorSet友好多了。

图像处理流程才是重头戏。模板匹配模块的FindModel方法藏着几个实用技巧:

halcon 复制代码
* 缩放模板提升匹配速度
zoom_image_size (TemplateImage, TemplateImageZoom, 320, 240, 'constant')
create_shape_model (TemplateImageZoom, 5, rad(0), rad(360), 'auto', 'auto', 'use_polarity', 'auto', 5, ModelID)

C#那边用Wrapper封装成带进度回调的异步方法,防止界面卡死。看这个匹配结果的可视化代码:

csharp 复制代码
hWindow.HalconWindow.SetColor("red");
hWindow.HalconWindow.DispRectangle2(pose.Row, pose.Column, pose.Angle, 50, 30);

用HSV颜色空间转换替代RGB是个坑,框架里的ColorConverter类自动处理通道顺序问题,避免新手被Halcon的channel顺序搞懵。

想扩展功能?试试往ProcessingPipeline里加自定义算子。我留了个FilterChain的钩子:

csharp 复制代码
public void AddFilter(Func<HObject, HObject> filter)
{
    _filters.Add(filter);
}

这样你自创的滤波算法可以直接插入处理流程。数据存储模块用SQLite缓存检测结果,查询时注意线程安全:

csharp 复制代码
lock (_dbLock)
{
    using var cmd = _connection.CreateCommand();
    cmd.CommandText = "INSERT INTO Results VALUES (@time, @data)";
    cmd.Parameters.AddWithValue("@time", DateTime.Now.ToString("yyyyMMddHHmmss"));
    cmd.ExecuteNonQuery();
}

GitHub仓库里准备了二十几个常见缺陷检测的案例项目,从二维码识别到焊点检测都有现成参考。记住别在halcon代码里写死路径,框架的ResourceManager会自动定位到项目下的images文件夹,新手克隆仓库直接F5就能跑起来。

相关推荐
CG_MAGIC3 个月前
Blender 重拓扑修改器实战指南:从基础操作到细节优化
blender·重拓扑
雪下的新火3 个月前
多软件共修:模型重拓扑&模型减面
经验分享·blender·3dmax·maya·三维建模·重拓扑·c4d
winfredzhang1 年前
meshy的文本到3d的使用
3d·动画·贴图·obj·重拓扑·文生模型
Renderbus瑞云渲染农场1 年前
Blender中的重拓扑修改器如何使用?
blender·云渲染·动画渲染·渲染农场·效果图渲染·重拓扑
misaka128072 年前
【maya 入门笔记】基本视图和拓扑
笔记·游戏·3dsmax·技术美术·maya·重拓扑·数字雕刻
子燕若水2 年前
Blender 的重拓扑功能中的参数,
blender·重拓扑