// ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. // 文件? GrayscaleProcessor.cs // 描述: 灰度图转换算子,用于将彩色图像转换为灰度图像 // 功能: // - 标准灰度转换(加权平均) // - 平均值法 // - 最大值法 // - 最小值法 // 算法: 加权平均?Gray = 0.299*R + 0.587*G + 0.114*B // 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; using Serilog; using XP.ImageProcessing.Core; namespace XP.ImageProcessing.Processors; /// /// 灰度图转换算? /// public class GrayscaleProcessor : ImageProcessorBase { private static readonly ILogger _logger = Log.ForContext(); public GrayscaleProcessor() { Name = LocalizationHelper.GetString("GrayscaleProcessor_Name"); Description = LocalizationHelper.GetString("GrayscaleProcessor_Description"); } protected override void InitializeParameters() { Parameters.Add("Method", new ProcessorParameter( "Method", LocalizationHelper.GetString("GrayscaleProcessor_Method"), typeof(string), "Weighted", null, null, LocalizationHelper.GetString("GrayscaleProcessor_Method_Desc"), new string[] { "Weighted", "Average", "Max", "Min" })); _logger.Debug("InitializeParameters"); } public override Image Process(Image inputImage) { string method = GetParameter("Method"); // 如果输入已经是灰度图,根据方法进行处? var result = inputImage.Clone(); switch (method) { case "Average": // 对于已经是灰度的图像,平均值法不改变图? break; case "Max": // 增强亮度 result = result * 1.2; break; case "Min": // 降低亮度 result = result * 0.8; break; case "Weighted": default: // 保持原样 break; } _logger.Debug("Process: Method = {Method}", method); return result; } }