百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

C#中使用Halcon开发视觉检测程序教程

liuian 2025-09-09 04:37 3 浏览

一、环境准备

1. 安装Halcon

从Halcon官方网站下载适合你操作系统的安装包,按照安装向导完成安装。安装过程中,记住安装路径,后续配置环境时会用到。

2. 配置Visual Studio项目

打开Visual Studio,创建一个新的C#项目(例如Windows Forms应用程序或WPF应用程序)。在项目中添加对Halcon库的引用,具体步骤如下:

  1. 在解决方案资源管理器中,右键点击“引用”,选择“添加引用”。

  2. 在弹出的对话框中,点击“浏览”,找到Halcon安装目录下的bin文件夹(例如C:\Program Files\MVTec\HALCON-21.11-Progress\bin\dotnet35,不同版本路径可能有所不同),选择halcondotnet.dll文件并添加。

二、图像采集

1. 使用相机采集图像

Halcon支持多种相机接口,如GigE Vision、USB等。以下是使用GigE Vision相机采集图像的示例代码:

usingHalconDotNet;
publicpartialclassForm1:Form
{
HObject ho_Image;
HOperatorSet.GenEmptyObj(outho_Image);
HTuple hv_AcqHandle;
// 打开相机
HOperatorSet.OpenFramegrabber("GigEVision",0,0,0,0,0,0, "default",8, "rgb",-1, "false", "default", "192.168.1.100",1883,-1,outhv_AcqHandle);
// 采集图像
HOperatorSet.GrabImage(outho_Image, hv_AcqHandle);
// 关闭相机
HOperatorSet.CloseFramegrabber(hv_AcqHandle);
}

在上述代码中,OpenFramegrabber函数用于打开相机,参数根据实际相机配置进行修改,GrabImage函数用于采集图像,采集完成后使用CloseFramegrabber关闭相机。

2. 读取本地图像

如果需要处理本地已有的图像文件,可使用以下代码:

HObject ho_Image;
HOperatorSet.ReadImage(outho_Image, "C:/path/to/your/image.jpg");

C:/path/to/your/image.jpg替换为实际的图像文件路径。

三、图像预处理

图像预处理是视觉检测的重要环节,常见的预处理操作包括灰度转换、滤波、二值化等。

1. 灰度转换

将彩色图像转换为灰度图像,便于后续处理:

HObject ho_GrayImage;
HOperatorSet.Rgb1ToGray(ho_Image,outho_GrayImage);

2. 滤波

使用均值滤波去除图像噪声:

HObject ho_SmoothedImage;
HOperatorSet.MeanImage(ho_GrayImage,outho_SmoothedImage,5,5);

这里的5,5表示滤波模板的大小,可根据实际情况调整。

3. 二值化

将灰度图像转换为二值图像,突出感兴趣区域:

HObject ho_BinaryImage;
HOperatorSet.Threshold(ho_SmoothedImage,outho_BinaryImage,100,255);

100255是灰度阈值,根据图像特点设置合适的值。

四、特征提取与检测

1. 边缘检测

使用Canny算子进行边缘检测:

HObject ho_Edges;
HOperatorSet.EdgesSubPix(ho_SmoothedImage,outho_Edges, "canny",1,20,40);

2. 形状匹配

假设我们要检测图像中的圆形物体,可以使用模板匹配的方法:

// 创建模板
HObject ho_Template;
HOperatorSet.ReadImage(outho_Template, "C:/path/to/template.jpg");
HObject ho_TemplateGray;
HOperatorSet.Rgb1ToGray(ho_Template,outho_TemplateGray);
HObject ho_TemplateEdges;
HOperatorSet.EdgesSubPix(ho_TemplateGray,outho_TemplateEdges, "canny",1,20,40);
HTuple hv_ModelID;
HOperatorSet.CreateScaledShapeModel(ho_TemplateEdges, "auto",0, HTuple.PI, "auto", "auto", "use_polarity", "auto", "auto",outhv_ModelID);

// 在目标图像中查找模板
HTuple hv_Row, hv_Column, hv_Angle, hv_Score;
HOperatorSet.FindScaledShapeModel(ho_SmoothedImage, hv_ModelID,0, HTuple.PI,0.7,1,0.5, "least_squares",0,0.9,outhv_Row,outhv_Column,outhv_Angle,outhv_Score);

// 销毁模板模型
HOperatorSet.ClearShapeModel(hv_ModelID);

上述代码先创建模板模型,然后在目标图像中查找匹配的形状,最后销毁模板模型。

五、结果显示与输出

1. 在窗口中显示图像

如果是Windows Forms应用程序,可以使用Halcon提供的HWindowControl控件显示图像:

  1. 在窗体上拖放一个HWindowControl控件。

  2. 使用以下代码将处理后的图像显示在控件中:

hWindowControl1.HalconWindow.DispObj(ho_Image);

2. 输出检测结果

将检测到的物体位置、形状等信息输出到控制台或保存到文件:

for(inti =0; i < hv_Row.Length; i++)
{
Console.WriteLine($"Found object at row:{hv_Row[i]}, column:{hv_Column[i]}, angle:{hv_Angle[i]}, score:{hv_Score[i]}");
}

以上就是C#中使用Halcon开发视觉检测程序的基本步骤和示例代码。实际应用中,你需要根据具体的检测需求,进一步优化算法和参数设置。

以上代码和步骤能帮你搭建起基础的视觉检测程序框架。若你在实践中有特定的检测需求,或是遇到运行问题,欢迎随时和我说说。

相关推荐

Html中Css样式Ⅱ_html+css+

元素的定位(方式五种定位方式):静态定位:position:static;相对定位:position:relative;绝对定位:position:absolute;固定定位:position...

HTML 标签和属性值的基本格式_html标签及属性的语法规则

HTML:HyperTextMarkupLanguage超文本标记语言HTML代码不区分大小写,包括HTML标记、属性、属性值都不区分大小写;任何空格或回车键在代码中都无效,插入空格或回车有...

基于Visual Studio C#语言开发上位机,做定制设计后有多好看

...

C#中使用Halcon开发视觉检测程序教程

一、环境准备1.安装Halcon从Halcon官方网站下载适合你操作系统的安装包,按照安装向导完成安装。安装过程中,记住安装路径,后续配置环境时会用到。2.配置VisualStudio项目打开V...

【开源】C#功能强大,灵活的跨平台开发框架 - Uno Platform

前言今天给广大网友分享一个基于C#开源、功能强大、灵活的跨平台开发框架,她就是:UnoPlatform。通过UnoPlatform,开发者可以利用单一代码库实现多平台兼容,极大地提高了开发效率和...

C# 的发展简史_c#的发展前景

1.C#的诞生和初期(2000-2005)2000年:在微软的PDC大会上,由AndersHejlsberg首次公开展示了C#语言。2002年:微软发布了.NETFramework1.0,其...

Visual Studio 2010-C#跟西门子1200(Sharp7)窗体控制②-启动按钮

VisualStudio2010--C#跟西门子1200(Sharp7)窗体控制②--启动按钮上期回顾(上期主要是新建窗体应用程序,添加sharp7的类库并引用,建立一个button按钮):本期将...

Visual Studio窗口布局混乱后的恢复与优化指南

在使用VisualStudio进行开发时,我们常因误操作(如拖拽窗口、关闭面板、多显示器切换)导致界面布局混乱,代码编辑器、解决方案资源管理器、属性面板等组件“错位”,严重影响开发效率。本文将针对布...

使用Visual Studio 2017为AutoCAD创建一个c#模板

本教程的目标是展示如何在VisualStudio2017中创建AutoCAD的c#项目模板,该模板允许在调试模式下从VisualStudio加载DLL来自动启动AutoCAD。本文展示的示例使用...

IT科技-续3Visual Studio2019-C#实战练习

上次完成了登录页面的窗体设计,本次完成管理界面的设计。第一步ComBox控制深度操作点击编辑选项,加入预定选项,完成操作。第二步复制Buttons控件依次为保存、删除、重置、编辑按钮属性设置,参考...

如何在 C# 中将文本转换为 Word 以及将 Word 转换为文本

在现代软件开发中,处理文档内容是一个非常常见的需求。无论是生成报告、存储日志,还是处理用户输入,开发者都可能需要在纯文本与Word文档之间进行转换。有时需要将文本转换为Word,以便生成结构化的...

简短的C#入门教程 # C# 入门教程 C#(读作...

简短的C#入门教程#C#入门教程C#(读作CSharp)是一种由Microsoft开发的多范式编程语言,它具有广泛的应用,特别是在Windows平台上。本教程将介绍C#的基础知识,以帮助您入门这...

JavaScript中this指向各种场景_前端中this的指向

在JavaScript中,this的指向是一个核心概念,其值取决于函数的调用方式,而非定义位置(箭头函数除外)。以下是this指向的常见场景及具体说明:1.全局作用域中的this在全局作用域(非...

微信WeUI设计规范文件下载及使用方法

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。WeUI是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信Web开发量身设计,可以令用户的使用感知...

JavaScript技术:如何动态添加事件?

随着前端技术的不断发展,JavaScript已经成为了不可或缺的一部分,它可以让网页变得更加流畅和美观。但是,在JavaScript中动态添加事件还是一个比较困难的问题,为此,本文将从入门到精通,介绍...