一、環(huán)境準(zhǔn)備
1. 安裝Halcon
從Halcon官方網(wǎng)站下載適合你操作系統(tǒng)的安裝包,按照安裝向?qū)瓿砂惭b。安裝過程中,記住安裝路徑,后續(xù)配置環(huán)境時(shí)會(huì)用到。
2. 配置Visual Studio項(xiàng)目
打開Visual Studio,創(chuàng)建一個(gè)新的C#項(xiàng)目(例如Windows Forms應(yīng)用程序或WPF應(yīng)用程序)。在項(xiàng)目中添加對(duì)Halcon庫(kù)的引用,具體步驟如下:
- 在解決方案資源管理器中,右鍵點(diǎn)擊“引用”,選擇“添加引用”。
- 在彈出的對(duì)話框中,點(diǎn)擊“瀏覽”,找到Halcon安裝目錄下的
bin
文件夾(例如C:\Program Files\MVTec\HALCON-21.11-Progress\bin\dotnet35
,不同版本路徑可能有所不同),選擇halcondotnet.dll
文件并添加。
二、圖像采集
1. 使用相機(jī)采集圖像
Halcon支持多種相機(jī)接口,如GigE Vision、USB等。以下是使用GigE Vision相機(jī)采集圖像的示例代碼:
using HalconDotNet;
public partial class Form1 : Form
{
HObject ho_Image;
HOperatorSet.GenEmptyObj(out ho_Image);
HTuple hv_AcqHandle;
// 打開相機(jī)
HOperatorSet.OpenFramegrabber("GigEVision", 0, 0, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", "192.168.1.100", 1883, -1, out hv_AcqHandle);
// 采集圖像
HOperatorSet.GrabImage(out ho_Image, hv_AcqHandle);
// 關(guān)閉相機(jī)
HOperatorSet.CloseFramegrabber(hv_AcqHandle);
}
在上述代碼中,OpenFramegrabber
函數(shù)用于打開相機(jī),參數(shù)根據(jù)實(shí)際相機(jī)配置進(jìn)行修改,GrabImage
函數(shù)用于采集圖像,采集完成后使用CloseFramegrabber
關(guān)閉相機(jī)。
2. 讀取本地圖像
如果需要處理本地已有的圖像文件,可使用以下代碼:
HObject ho_Image;
HOperatorSet.ReadImage(out ho_Image, "C:/path/to/your/image.jpg");
將C:/path/to/your/image.jpg
替換為實(shí)際的圖像文件路徑。
三、圖像預(yù)處理
圖像預(yù)處理是視覺檢測(cè)的重要環(huán)節(jié),常見的預(yù)處理操作包括灰度轉(zhuǎn)換、濾波、二值化等。
1. 灰度轉(zhuǎn)換
將彩色圖像轉(zhuǎn)換為灰度圖像,便于后續(xù)處理:
HObject ho_GrayImage;
HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
2. 濾波
使用均值濾波去除圖像噪聲:
HObject ho_SmoothedImage;
HOperatorSet.MeanImage(ho_GrayImage, out ho_SmoothedImage, 5, 5);
這里的5,5
表示濾波模板的大小,可根據(jù)實(shí)際情況調(diào)整。
3. 二值化
將灰度圖像轉(zhuǎn)換為二值圖像,突出感興趣區(qū)域:
HObject ho_BinaryImage;
HOperatorSet.Threshold(ho_SmoothedImage, out ho_BinaryImage, 100, 255);
100
和255
是灰度閾值,根據(jù)圖像特點(diǎn)設(shè)置合適的值。
四、特征提取與檢測(cè)
1. 邊緣檢測(cè)
使用Canny算子進(jìn)行邊緣檢測(cè):
HObject ho_Edges;
HOperatorSet.EdgesSubPix(ho_SmoothedImage, out ho_Edges, "canny", 1, 20, 40);
2. 形狀匹配
假設(shè)我們要檢測(cè)圖像中的圓形物體,可以使用模板匹配的方法:
// 創(chuàng)建模板
HObject ho_Template;
HOperatorSet.ReadImage(out ho_Template, "C:/path/to/template.jpg");
HObject ho_TemplateGray;
HOperatorSet.Rgb1ToGray(ho_Template, out ho_TemplateGray);
HObject ho_TemplateEdges;
HOperatorSet.EdgesSubPix(ho_TemplateGray, out ho_TemplateEdges, "canny", 1, 20, 40);
HTuple hv_ModelID;
HOperatorSet.CreateScaledShapeModel(ho_TemplateEdges, "auto", 0, HTuple.PI, "auto", "auto", "use_polarity", "auto", "auto", out hv_ModelID);
// 在目標(biāo)圖像中查找模板
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, out hv_Row, out hv_Column, out hv_Angle, out hv_Score);
// 銷毀模板模型
HOperatorSet.ClearShapeModel(hv_ModelID);
上述代碼先創(chuàng)建模板模型,然后在目標(biāo)圖像中查找匹配的形狀,最后銷毀模板模型。
五、結(jié)果顯示與輸出
1. 在窗口中顯示圖像
如果是Windows Forms應(yīng)用程序,可以使用Halcon提供的HWindowControl
控件顯示圖像:
- 在窗體上拖放一個(gè)
HWindowControl
控件。
hWindowControl1.HalconWindow.DispObj(ho_Image);
2. 輸出檢測(cè)結(jié)果
將檢測(cè)到的物體位置、形狀等信息輸出到控制臺(tái)或保存到文件:
for (int i = 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開發(fā)視覺檢測(cè)程序的基本步驟和示例代碼。實(shí)際應(yīng)用中,你需要根據(jù)具體的檢測(cè)需求,進(jìn)一步優(yōu)化算法和參數(shù)設(shè)置。
以上代碼和步驟能幫你搭建起基礎(chǔ)的視覺檢測(cè)程序框架。
閱讀原文:原文鏈接
該文章在 2025/5/6 12:46:51 編輯過