C3031
2026-01-30 0ab0fde3216783ee2694d8d4bfbb94237e25a4bb
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs
@@ -1,7 +1,9 @@
using HalconDotNet;
using LB_SmartVisionCommon;
using LB_VisionControl;
using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -11,13 +13,13 @@
{
    public enum ImageEnhancementType { Emphasize, EquHisto, ScaleMax }
    [Process("Halcon图像增强", Category = "Halcon2D工具", Description = "创建图像增强工具")]
    [Process("Halcon2D图像增强", Category = "Halcon2D工具", Description = "创建图像增强工具")]
    public class HImageEnhancementTool : TAlgorithm
    {
        public HImageEnhancementTool()
        {
            strProcessClass = "LB_VisionProcesses.Alogrithms.Halcon.HImageEnhancementTool";
            strProcessName = "Halcon图像增强工具";
            strProcessName = "Halcon2D图像增强工具";
            Params.Inputs.Add("滤波器类型", "边缘增强");
            Params.Inputs.Add("掩膜宽", 1);
@@ -33,7 +35,8 @@
            Params.ROI = new HSegment(0, 0, 250, 250);
        }
        List<RecordImageEnhancementData> recordImageEnhancementDatas = new List<RecordImageEnhancementData>();
        /// <summary>
        /// 算子逻辑
        /// </summary>
@@ -53,23 +56,56 @@
                    Result = false;
                    return;
                }
                #region 裁剪区域
                if (!(Params.ROI is HSegment))
                if (InputImage is Bitmap)
                {
                    Msg = "ROI类型错误,必须为HSegment类型";
                    Result = false;
                    return;
                    try
                    {
                        using (HImage hImage = new HImage())
                        {
                            Bitmap bitmap = (Bitmap)InputImage;
                            Rectangle rect = new Rectangle(0, 0, ((Bitmap)bitmap).Width, ((Bitmap)bitmap).Height);
                            BitmapData srcBmpData = ((Bitmap)bitmap).LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
                            hImage.GenImageInterleaved(srcBmpData.Scan0, "rgbx", ((Bitmap)bitmap).Width, ((Bitmap)bitmap).Height, 0, "byte", ((Bitmap)bitmap).Width, ((Bitmap)bitmap).Height, 0, 0, -1, 0);
                            ((Bitmap)bitmap).UnlockBits(srcBmpData);
                            bitmap.Dispose();
                            bitmap = null;
                            InputImage = null;
                            InputImage = hImage.Clone();
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                }
                if (!(InputImage is HObject))
                {
                    Msg = "输入图片类型错误,必须为HObject类型";
                    Msg = "输入图片格式不为HObject";
                    Result = false;
                    return;
                }
                #region 裁剪区域
                //if (!(Params.ROI is HSegment))
                //{
                //    Msg = "ROI类型错误,必须为HSegment类型";
                //    Result = false;
                //    return;
                //}
                HObject DomainImage = ((HObject)InputImage)?.CopyObj(1, -1);
                //if (!(InputImage is HObject))
                //{
                //    Msg = "输入图片类型错误,必须为HObject类型";
                //    Result = false;
                //    return;
                //}
                //HObject DomainImage = ((HObject)InputImage)?.CopyObj(1, -1);
                object DomainImage = null;
                if (!ReduceDomainImage(InputImage, ref DomainImage))
                {
                    Msg = "裁剪区域失败";
                    Result = false;
                    return;
                }
                #endregion
                #region 算子逻辑
@@ -106,30 +142,37 @@
                int hv_MaskWidth = Convert.ToInt16(Params.Inputs["掩膜宽"]);
                int hv_MaskHight = Convert.ToInt16(Params.Inputs["掩膜高"]);
                double hv_Factor = Convert.ToDouble(Params.Inputs["增强因子"]);
                recordImageEnhancementDatas = ImageEnhancementManager.Instance.GetAllUsers();
                Enum.TryParse(Params.Inputs["图像增强类型"]?.ToString(), out ImageEnhancementType imageEnhancementType);
                string hv_ImageEnhancementType = "scaleMax";
                switch (imageEnhancementType)
                string hv_ImageEnhancementType = "";
                foreach (var recordImageEnhancementData in recordImageEnhancementDatas)
                {
                    case ImageEnhancementType.Emphasize:
                        hv_ImageEnhancementType = "emphasize";
                    switch (recordImageEnhancementData.FilterName)
                    {
                        case ImageEnhancementDataType.边缘增强_ImageEmphasize:
                            hv_ImageEnhancementType = "emphasize";
                            hv_MaskWidth = Convert.ToInt16(recordImageEnhancementData.MaskWidth);
                            hv_MaskHight = Convert.ToInt16(recordImageEnhancementData.MaskHight);
                            hv_Factor = Convert.ToDouble(recordImageEnhancementData.Factor);
                            ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_MaskWidth, hv_MaskHight, hv_Factor);
                            break;
                        case ImageEnhancementDataType.直方图均衡化_EquHistoImage:
                            hv_ImageEnhancementType = "equhisto";
                            ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_MaskWidth, hv_MaskHight, hv_Factor);
                            break;
                        case ImageEnhancementDataType.比例增强_ScaleImageMax:
                            hv_ImageEnhancementType = "scaleimageMax";
                            ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_MaskWidth, hv_MaskHight, hv_Factor);
                            break;
                        default:
                            hv_ImageEnhancementType = "scaleImageMax";
                            ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_MaskWidth, hv_MaskHight, hv_Factor);
                            break;
                    }
                        break;
                    case ImageEnhancementType.EquHisto:
                        hv_ImageEnhancementType = "equHisto";
                        break;
                    case ImageEnhancementType.ScaleMax:
                    default:
                        hv_ImageEnhancementType = "scaleMax";
                        break;
                }
                double hv_Row1 = Convert.ToDouble(((HSegment)Params.ROI).BeginRow + Params.Fixture.Row);
                double hv_Column1 = Convert.ToDouble(((HSegment)Params.ROI).BeginColumn + Params.Fixture.Column);
                double hv_Row2 = Convert.ToDouble(((HSegment)Params.ROI).EndRow + Params.Fixture.Row);
                double hv_Column2 = Convert.ToDouble(((HSegment)Params.ROI).EndColumn + Params.Fixture.Column);
                ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_Column1, hv_Row2, hv_Column2);
                #endregion