From 46431fb658701489f8d5de4475b02df728c51f36 Mon Sep 17 00:00:00 2001
From: chunxiaqiu <1057644574@qq.com>
Date: 星期三, 18 三月 2026 15:48:26 +0800
Subject: [PATCH] 新增:读码器功能模块,集成华睿读码器并初步实现读码功能
---
LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs | 223 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 223 insertions(+), 0 deletions(-)
diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs
new file mode 100644
index 0000000..9b4a1f0
--- /dev/null
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs
@@ -0,0 +1,223 @@
+锘縰sing 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;
+using static System.Runtime.InteropServices.JavaScript.JSType;
+
+namespace LB_VisionProcesses.Alogrithms.Halcon
+{
+ public enum ImageEnhancementType { Emphasize, EquHisto, ScaleMax }
+
+ [Process("Halcon2D鍥惧儚澧炲己", Category = "Halcon2D宸ュ叿", Description = "鍒涘缓鍥惧儚澧炲己宸ュ叿")]
+ public class HImageEnhancementTool : TAlgorithm
+ {
+ public HImageEnhancementTool()
+ {
+ strProcessClass = "LB_VisionProcesses.Alogrithms.Halcon.HImageEnhancementTool";
+ strProcessName = "Halcon2D鍥惧儚澧炲己宸ュ叿";
+
+ Params.Inputs.Add("婊ゆ尝鍣ㄧ被鍨�", "杈圭紭澧炲己");
+ Params.Inputs.Add("鎺╄啘瀹�", 1);
+ Params.Inputs.Add("鎺╄啘楂�", 1);
+ Params.Inputs.Add("澧炲己鍥犲瓙", 1.0);
+ //emphasize(Image : ImageEmphasize : MaskWidth, MaskHeight, Factor : )
+
+ Params.Inputs.Add("婊ゆ尝鍣ㄧ被鍨�", "鐩存柟鍥惧潎琛″寲");
+ //equ_histo_image(Image : ImageEquHisto : : )
+
+ Params.Inputs.Add("婊ゆ尝鍣ㄧ被鍨�", "姣斾緥澧炲己");
+ //scale_image_max(Image : ImageScaleMax : : )
+
+ Params.ROI = new HSegment(0, 0, 250, 250);
+ }
+
+ List<RecordImageEnhancementData> recordImageEnhancementDatas = new List<RecordImageEnhancementData>();
+ /// <summary>
+ /// 绠楀瓙閫昏緫
+ /// </summary>
+ public override void TAlgorithmMain()
+ {
+ #region 鍒濆鍖栧彉閲�
+ HObject ho_Regions, ho_LineXld;
+ HOperatorSet.GenEmptyObj(out ho_Regions);
+ HOperatorSet.GenEmptyObj(out ho_LineXld);
+ #endregion
+
+ try
+ {
+ if (InputImage == null)
+ {
+ Msg = "杈撳叆鍥剧墖涓虹┖";
+ Result = false;
+ return;
+ }
+ if (InputImage is Bitmap)
+ {
+ 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";
+ Result = false;
+ return;
+ }
+ #region 瑁佸壀鍖哄煙
+ //if (!(Params.ROI is HSegment))
+ //{
+ // Msg = "ROI绫诲瀷閿欒,蹇呴』涓篐Segment绫诲瀷";
+ // Result = false;
+ // return;
+ //}
+
+ //if (!(InputImage is HObject))
+ //{
+ // Msg = "杈撳叆鍥剧墖绫诲瀷閿欒,蹇呴』涓篐Object绫诲瀷";
+ // Result = false;
+ // return;
+ //}
+
+ //HObject DomainImage = ((HObject)InputImage)?.CopyObj(1, -1);
+ object DomainImage = null;
+ if (!ReduceDomainImage(InputImage, ref DomainImage))
+ {
+ Msg = "瑁佸壀鍖哄煙澶辫触";
+ Result = false;
+ return;
+ }
+ #endregion
+
+ #region 绠楀瓙閫昏緫
+ Record = new ObjectRecord();
+ HObject hoDomainImage = DomainImage as HObject;
+ HTuple hv_Channels = new HTuple();
+ //鍒ゆ柇鏄惁涓虹伆搴﹀浘
+ using (HDevDisposeHelper dh = new HDevDisposeHelper())
+ {
+ try
+ {
+ HOperatorSet.CountChannels(hoDomainImage, out hv_Channels);
+ if (hv_Channels.TupleInt() != 1)
+ HOperatorSet.Rgb1ToGray(hoDomainImage, out hoDomainImage);
+
+ //杞崲鍚庡啀娆℃鏌ユ槸鍚︿负鐏板害鍥�
+ HOperatorSet.CountChannels(hoDomainImage, out hv_Channels);
+ if (hv_Channels.TupleInt() != 1)
+ {
+ HOperatorSet.Rgb1ToGray(hoDomainImage, out hoDomainImage);
+ Msg = "杈撳叆鍥剧墖涓嶄负鐏板害鍥�";
+ Result = false;
+ return;
+ }
+ }
+ catch
+ {
+ Msg = "杈撳叆鍥剧墖涓嶄负鐏板害鍥句笖杞崲澶辫触";
+ Result = false;
+ return;
+ }
+ }
+
+ 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();
+
+ string hv_ImageEnhancementType = "";
+ foreach (var recordImageEnhancementData in recordImageEnhancementDatas)
+ {
+ 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;
+ }
+
+
+ }
+ #endregion
+
+
+ #region 鐢熸垚OutputImage缁欏悗缁鐞�
+ try
+ {
+ OutputImage = hoDomainImage;
+ }
+ catch (Exception ex)
+ {
+ Msg = "鐢熸垚OutputImage澶辫触,鍘熷洜鏄�:" + ex.ToString();
+ Result = false;
+ return;
+ }
+ #endregion
+
+ if (Msg == "杩愯瓒呮椂")
+ {
+ Result = false;
+ return;
+ }
+
+ Msg = "杩愯鎴愬姛";
+ Result = true;
+ return;
+ }
+ catch (Exception ex)
+ {
+ Msg = "杩愯澶辫触,鍘熷洜鏄�:" + ex.ToString().TrimEnd();
+ OutputImage = null;
+ Result = false;
+ return;
+ }
+ finally
+ {
+ if (!Result)
+ {
+ Params.Outputs.Add("Segment", new HSegment());
+ }
+
+ bCompleted = true;
+ #region 鍐呭瓨閲婃斁
+ ho_Regions.Dispose();
+ #endregion
+ }
+ }
+ }
+}
--
Gitblit v1.9.3