using HalconDotNet; using System; using System.Collections.Generic; using System.IO; namespace HalconTemplateMatch { public class LogoTemplateTrainer { /// /// 从多张样本图像生成模板并保存到文件 /// /// 训练图片路径集合 /// 模板保存目录 public void TrainAndSaveTemplates(List imagePaths, string saveDir) { if (!Directory.Exists(saveDir)) Directory.CreateDirectory(saveDir); int index = 0; foreach (var path in imagePaths) { HObject ho_Image; HOperatorSet.ReadImage(out ho_Image, path); // 转灰度 HOperatorSet.Rgb1ToGray(ho_Image, out HObject ho_Gray); // 二值化 HOperatorSet.Threshold(ho_Gray, out HObject ho_Region, 128, 255); // 提取连通域 HOperatorSet.Connection(ho_Region, out HObject ho_Connected); HOperatorSet.SelectShapeStd(ho_Connected, out HObject ho_Selected, "max_area", 70); // ROI 约束 HOperatorSet.ReduceDomain(ho_Gray, ho_Selected, out HObject ho_ROI); // 创建形状模板 HTuple modelID; HOperatorSet.CreateShapeModel( ho_ROI, "auto", new HTuple(0).TupleRad(), new HTuple(360).TupleRad(), "auto", "auto", "use_polarity", "auto", "auto", out modelID); // 保存模板到文件 string modelFile = Path.Combine(saveDir, $"logo_model_{index}.shm"); HOperatorSet.WriteShapeModel(modelID, modelFile); Console.WriteLine($"训练完成并保存模板: {modelFile}"); index++; } } } }