63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using HalconDotNet;
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.IO;
 | |
| 
 | |
| namespace HalconTemplateMatch
 | |
| {
 | |
|     public class LogoTemplateTrainer
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// 从多张样本图像生成模板并保存到文件
 | |
|         /// </summary>
 | |
|         /// <param name="imagePaths">训练图片路径集合</param>
 | |
|         /// <param name="saveDir">模板保存目录</param>
 | |
|         public void TrainAndSaveTemplates(List<string> 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++;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |