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

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

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

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

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

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

* 缩放模板提升匹配速度
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封装成带进度回调的异步方法,防止界面卡死。看这个匹配结果的可视化代码:

hWindow.HalconWindow.SetColor("red");
hWindow.HalconWindow.DispRectangle2(pose.Row, pose.Column, pose.Angle, 50, 30);

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

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

public void AddFilter(Func<HObject, HObject> filter)
{
    _filters.Add(filter);
}

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

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就能跑起来。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐