From f80939dad4a75b77362b9b60c0f48e941ffc896e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=89=E9=B8=AD=E8=9B=8B?= Date: Fri, 20 Feb 2026 22:28:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=89=80=E6=9C=89=20Cv2.ImRe?= =?UTF-8?q?ad=20=EF=BC=8C=E8=A7=A3=E5=86=B3=E4=B8=AD=E6=96=87=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Recognition/OCR/Paddle/PaddleOcrService.cs | 3 ++- .../OpenCv/FeatureMatch/Feature2DExtensions.cs | 3 ++- .../GameTask/Common/BgiVision/BvImage.cs | 10 +++++++++- .../GameTask/Common/Map/CharacterOrientation.cs | 3 ++- .../Map/Maps/Base/BaseMapLayerByTemplateMatch.cs | 5 +++-- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/BetterGenshinImpact/Core/Recognition/OCR/Paddle/PaddleOcrService.cs b/BetterGenshinImpact/Core/Recognition/OCR/Paddle/PaddleOcrService.cs index c54b5797..01f29392 100644 --- a/BetterGenshinImpact/Core/Recognition/OCR/Paddle/PaddleOcrService.cs +++ b/BetterGenshinImpact/Core/Recognition/OCR/Paddle/PaddleOcrService.cs @@ -7,6 +7,7 @@ using System.Linq; using BetterGenshinImpact.Core.Config; using BetterGenshinImpact.Core.Recognition.OCR.Engine; using BetterGenshinImpact.Core.Recognition.ONNX; +using BetterGenshinImpact.GameTask.Common.BgiVision; using OpenCvSharp; using OpenCvSharp.Extensions; using YamlDotNet.Core; @@ -247,7 +248,7 @@ public class PaddleOcrService : IOcrService, IOcrMatchService, IDisposable _localRecModel = modelsRec; // 预热模型 - using var preHeatImageMat = Cv2.ImRead(modelType.PreHeatImagePath) ?? + using var preHeatImageMat = Bv.ImRead(modelType.PreHeatImagePath) ?? throw new FileNotFoundException($"预热图片未找到: {modelType.PreHeatImagePath}"); // Debug输出结果 var preHeatResult = RunAll(preHeatImageMat, 1); diff --git a/BetterGenshinImpact/Core/Recognition/OpenCv/FeatureMatch/Feature2DExtensions.cs b/BetterGenshinImpact/Core/Recognition/OpenCv/FeatureMatch/Feature2DExtensions.cs index e802f1f6..dea354ab 100644 --- a/BetterGenshinImpact/Core/Recognition/OpenCv/FeatureMatch/Feature2DExtensions.cs +++ b/BetterGenshinImpact/Core/Recognition/OpenCv/FeatureMatch/Feature2DExtensions.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using BetterGenshinImpact.GameTask.Common.BgiVision; using BetterGenshinImpact.Helpers; using OpenCvSharp; @@ -24,7 +25,7 @@ public static class Feature2DExtensions public static void SaveFeatures(this Feature2D feature2D, string trainImagePath, string trainKeyPointsPath, string trainDescriptorsPath) { Mat trainDescriptors = new(); - var img = Cv2.ImRead(trainImagePath, ImreadModes.Grayscale); + var img = Bv.ImRead(trainImagePath, ImreadModes.Grayscale); feature2D.DetectAndCompute(img, null, out var trainKeyPoints, trainDescriptors); diff --git a/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs b/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs index cd65b226..00ccce31 100644 --- a/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs +++ b/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs @@ -1,7 +1,9 @@ -using System.Threading; +using System.IO; +using System.Threading; using System.Threading.Tasks; using BetterGenshinImpact.Core.Recognition; using BetterGenshinImpact.GameTask.Model.Area; +using OpenCvSharp; namespace BetterGenshinImpact.GameTask.Common.BgiVision; @@ -10,6 +12,12 @@ namespace BetterGenshinImpact.GameTask.Common.BgiVision; /// public static partial class Bv { + + public static Mat ImRead(string fileName, ImreadModes flags = ImreadModes.Color) + { + return Mat.FromStream(File.OpenRead(fileName), flags); + } + /// /// 等待图像被找到 /// diff --git a/BetterGenshinImpact/GameTask/Common/Map/CharacterOrientation.cs b/BetterGenshinImpact/GameTask/Common/Map/CharacterOrientation.cs index 11732b4e..01010e61 100644 --- a/BetterGenshinImpact/GameTask/Common/Map/CharacterOrientation.cs +++ b/BetterGenshinImpact/GameTask/Common/Map/CharacterOrientation.cs @@ -1,5 +1,6 @@ using OpenCvSharp; using System; +using BetterGenshinImpact.GameTask.Common.BgiVision; namespace BetterGenshinImpact.GameTask.Common.Map; @@ -119,7 +120,7 @@ public class CharacterOrientation public static int GameAngle2(string path) { - var mat = Cv2.ImRead(path); + var mat = Bv.ImRead(path); return Compute(mat); } } diff --git a/BetterGenshinImpact/GameTask/Common/Map/Maps/Base/BaseMapLayerByTemplateMatch.cs b/BetterGenshinImpact/GameTask/Common/Map/Maps/Base/BaseMapLayerByTemplateMatch.cs index af1291da..1c57731a 100644 --- a/BetterGenshinImpact/GameTask/Common/Map/Maps/Base/BaseMapLayerByTemplateMatch.cs +++ b/BetterGenshinImpact/GameTask/Common/Map/Maps/Base/BaseMapLayerByTemplateMatch.cs @@ -9,6 +9,7 @@ using BetterGenshinImpact.Helpers; using OpenCvSharp; using System.Text.Json.Serialization; using BetterGenshinImpact.Core.Recognition.OpenCv.TemplateMatch; +using BetterGenshinImpact.GameTask.Common.BgiVision; namespace BetterGenshinImpact.GameTask.Common.Map.Maps.Base; @@ -33,12 +34,12 @@ public class BaseMapLayerByTemplateMatch SpeedTimer speedTimer = new($"加载 {LayerId} 地图图片"); var colorMapFileName = LayerId + "_color" + ".webp"; var colorMapPath = Path.Combine(layerDir, colorMapFileName); - var coarseColorMap = Cv2.ImRead(colorMapPath)?? throw new Exception($"彩色分层地图 {LayerId} 读取失败"); + var coarseColorMap = Bv.ImRead(colorMapPath)?? throw new Exception($"彩色分层地图 {LayerId} 读取失败"); speedTimer.Record("精确匹配用彩图"); CoarseColorMatcher = new FastSqDiffMatcher(coarseColorMap, new Size(52, 52)); var grayMapFileName = LayerId + "_gray" + (IsOverSize ? ".png" : ".webp"); var grayMapPath = Path.Combine(layerDir, grayMapFileName); - FineGrayMap = Cv2.ImRead(grayMapPath, ImreadModes.Grayscale)?? throw new Exception($"灰度分层地图 {LayerId} 读取失败"); + FineGrayMap = Bv.ImRead(grayMapPath, ImreadModes.Grayscale)?? throw new Exception($"灰度分层地图 {LayerId} 读取失败"); speedTimer.Record("粗匹配用灰度图"); speedTimer.DebugPrint(); }