news 2026/4/16 17:54:10

C# 与 Halcon 17.12 的梦幻联动:打造强大视觉项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C# 与 Halcon 17.12 的梦幻联动:打造强大视觉项目

C#联合Halcon视觉框架,可以根据项目配置工程,选择对应halcon脚本,可以编译修改脚本,调试相机,创建模板,可以查看检测信息,生产履历,保存历史图像,跟三菱FX5U以太网通讯,相机是海康网口sdk,halcon版本17.12,

在工业视觉领域,将 C# 与 Halcon 框架相结合,能够释放出令人惊叹的能力。今天就来聊聊如何利用这两者,打造一个功能丰富的视觉项目。

一、项目配置与 Halcon 脚本选择

在开始项目前,我们要先进行工程配置。Halcon 提供了脚本的方式来处理视觉任务,我们可以根据项目需求灵活选择对应的 Halcon 脚本。例如,在一个简单的产品外观检测项目中,可能会有检测产品表面划痕的脚本,以及检测产品是否组装完整的脚本。

在 C# 中,我们可以通过代码来加载不同的 Halcon 脚本。假设已经将 Halcon 的运行时环境集成到项目中,可以这样加载脚本:

using HalconDotNet; class Program { static void Main() { HOperatorSet.GenEmptyObj(out HObject ho_Image); HOperatorSet.ReadImage(out ho_Image, "your_image_path"); // 加载 Halcon 脚本文件 HDevProgram program = new HDevProgram("your_script_path.hdev"); HDevEngine engine = new HDevEngine(program); // 执行脚本中的函数 engine.Execute(); } }

在这段代码中,首先生成一个空的 Halcon 对象ho_Image,然后读取一张图片。接着加载指定路径下的 Halcon 脚本文件,并创建一个执行引擎来执行脚本中的操作。

二、编译与修改脚本

Halcon 的脚本并不是一成不变的,我们可以根据实际情况对其进行编译和修改。比如在实际检测过程中,发现检测精度不够,就需要调整脚本中的参数。

C#联合Halcon视觉框架,可以根据项目配置工程,选择对应halcon脚本,可以编译修改脚本,调试相机,创建模板,可以查看检测信息,生产履历,保存历史图像,跟三菱FX5U以太网通讯,相机是海康网口sdk,halcon版本17.12,

在 Halcon 的开发环境中,可以直接打开脚本文件进行修改。修改完成后,重新编译。在 C# 代码中加载修改后的脚本,就可以使用新的逻辑进行视觉处理。

三、调试相机

本项目使用海康网口 SDK 的相机。在 C# 中调用海康相机 SDK 来调试相机,确保相机能够正常采集图像是关键的一步。以下是一个简单的相机初始化代码示例:

using System; using HikVision; class CameraManager { private Camera camera; public CameraManager() { camera = new Camera(); // 初始化相机参数 camera.Init("192.168.1.100", 8000, "admin", "password"); camera.Connect(); } public HObject GetImage() { byte[] imageData = camera.GetImageData(); // 将相机采集到的数据转换为 Halcon 可处理的图像对象 HOperatorSet.GenImage1(out HObject ho_Image, "byte", camera.Width, camera.Height, imageData); return ho_Image; } }

这段代码定义了一个CameraManager类来管理相机的连接和图像获取。在构造函数中初始化相机并连接,GetImage方法获取相机采集的图像数据,并转换为 Halcon 能处理的图像对象。

四、创建模板

模板匹配在视觉检测中非常重要。使用 Halcon 可以轻松创建模板。以下是一个简单的创建模板示例:

HOperatorSet.GenEmptyObj(out HObject ho_Template); HOperatorSet.ReadImage(out HObject ho_ImageForTemplate, "template_image_path"); HOperatorSet.CreateShapeModel(ho_ImageForTemplate, "auto", 0, Math.PI, "auto", "none", "use_polarity", "auto", 0.5, out HTuple hv_ModelID); HOperatorSet.GenEmptyObj(out ho_Template); HOperatorSet.GetShapeModelContours(out ho_Template, hv_ModelID, 1);

上述代码首先读取一张用于创建模板的图片,然后使用CreateShapeModel函数创建形状模型,并获取模型的轮廓作为模板。

五、查看检测信息与生产履历

在检测完成后,我们需要查看检测信息,并记录生产履历。可以在 C# 中使用数据库来存储这些信息。例如使用 SQLite 数据库:

using System.Data.SQLite; class HistoryManager { private SQLiteConnection connection; public HistoryManager() { string connectionString = "Data Source=production_history.db;Version=3;"; connection = new SQLiteConnection(connectionString); connection.Open(); // 创建表(如果不存在) string createTableQuery = "CREATE TABLE IF NOT EXISTS ProductionHistory (Id INTEGER PRIMARY KEY AUTOINCREMENT, DetectionResult TEXT, ImagePath TEXT, Timestamp DATETIME)"; SQLiteCommand command = new SQLiteCommand(createTableQuery, connection); command.ExecuteNonQuery(); } public void SaveHistory(string result, string imagePath) { string insertQuery = "INSERT INTO ProductionHistory (DetectionResult, ImagePath, Timestamp) VALUES (@result, @imagePath, @timestamp)"; SQLiteCommand command = new SQLiteCommand(insertQuery, connection); command.Parameters.AddWithValue("@result", result); command.Parameters.AddWithValue("@imagePath", imagePath); command.Parameters.AddWithValue("@timestamp", DateTime.Now); command.ExecuteNonQuery(); } }

这段代码创建了一个HistoryManager类,用于管理生产履历的存储。构造函数中创建数据库连接并创建存储检测历史的表,SaveHistory方法将每次检测的结果、图像路径和时间戳保存到数据库中。

六、保存历史图像

为了后续分析和追溯,保存历史图像是必要的。可以使用 C# 的文件操作来实现:

string savePath = "history_images\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"; HOperatorSet.WriteImage(ho_Image, "jpeg", 0, savePath);

上述代码将当前处理的图像以 JPEG 格式保存到指定的历史图像文件夹中,文件名包含时间戳。

七、与三菱 FX5U 以太网通讯

最后,实现与三菱 FX5U 的以太网通讯,可以将检测结果发送给 PLC。这里使用三菱提供的通讯库来实现:

using MitsubishiFx5u; class PLCCommunication { private Fx5uPlc plc; public PLCCommunication() { plc = new Fx5uPlc("192.168.1.200", 5007); plc.Connect(); } public void SendData(string data) { // 将数据转换为 PLC 可接收的格式并发送 byte[] dataBytes = System.Text.Encoding.ASCII.GetBytes(data); plc.Write(dataBytes, 0, dataBytes.Length); } }

这段代码创建了一个PLCCommunication类,用于连接三菱 FX5U PLC 并发送数据。在构造函数中建立连接,SendData方法将检测结果数据转换为字节数组并发送给 PLC。

通过以上步骤,我们利用 C# 和 Halcon 17.12,结合海康相机以及与三菱 PLC 的通讯,打造了一个功能全面的视觉项目。无论是从相机调试、视觉处理,还是数据记录与通讯,各个环节紧密配合,为工业生产中的视觉检测提供了强大的解决方案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:22:54

企业培训资料转化,科哥镜像实现知识沉淀

企业培训资料转化,科哥镜像实现知识沉淀 在企业内部,大量有价值的培训内容长期沉睡在会议录音、讲师口述、现场研讨等非结构化音频中。传统人工转录耗时耗力,外包成本高,且难以保证专业术语准确率;而通用语音识别工具…

作者头像 李华
网站建设 2026/4/15 23:14:18

跨城市地址标准化挑战:MGeo模型适应性调参与部署指南

跨城市地址标准化挑战:MGeo模型适应性调参与部署指南 1. 为什么地址标准化成了城市间数据流动的“卡点” 你有没有遇到过这样的情况:同一栋写字楼,在不同系统里被写成“北京市朝阳区建国路8号SOHO现代城A座”“北京朝阳建国路SOHO A座”“朝…

作者头像 李华
网站建设 2026/4/16 9:24:04

AIVideo保姆级教程:Windows/Mac/Linux三端浏览器兼容性与最佳实践

AIVideo保姆级教程:Windows/Mac/Linux三端浏览器兼容性与最佳实践 1. 什么是AIVideo?——一站式AI长视频创作工具 你有没有试过想做一条专业视频,却卡在写脚本、找素材、配画面、录配音、剪节奏这一连串环节里?反复修改、反复重…

作者头像 李华
网站建设 2026/4/16 12:33:45

5步打造手机视觉智能:让自动点击工具看懂屏幕内容的终极指南

5步打造手机视觉智能:让自动点击工具看懂屏幕内容的终极指南 【免费下载链接】Smart-AutoClicker An open-source auto clicker on images for Android 项目地址: https://gitcode.com/gh_mirrors/smar/Smart-AutoClicker 为什么传统自动点击工具总在关键时刻…

作者头像 李华
网站建设 2026/4/16 7:08:26

SiameseUIE中文-base入门教程:从CSDN GPU云平台启动到结果导出

SiameseUIE中文-base入门教程:从CSDN GPU云平台启动到结果导出 你是不是经常遇到这样的问题:手头有一堆中文新闻、电商评论或客服对话,想快速抽取出人名、公司、时间、产品属性、情感倾向这些关键信息,但又不想写复杂代码、调模型…

作者头像 李华