C# 使用 OpenCvSharp4 套件圖片比對自動點擊

在電腦中該如何自動移動滑鼠/點擊指定的按鈕?除了使用按鍵精靈以外可以使用 C# 達成,將螢幕截圖處理後,和預存的圖片比對,相似度足夠就移動滑鼠過去,使用 OpenCvSharp4 套件很簡單就可以達成。

安裝

先安裝下面三個套件:
	
dotnet add package OpenCvSharp4
dotnet add package OpenCvSharp4.Extensions
dotnet add package OpenCvSharp4.runtime.win
    

直接看程式碼:
    
using OpenCvSharp;
using OpenCvSharp.Extensions;


Bitmap screenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height-200);
using Graphics graphics = Graphics.FromImage(screenshot);
graphics.CopyFromScreen(0, 0, 0, 0, screenshot.Size);

// 轉換為 MAT 格式
Mat screenMat = BitmapConverter.ToMat(screenshot);

// 轉換為灰階
Cv2.CvtColor(screenMat, screenMat, ColorConversionCodes.BGR2GRAY);


// 高斯模糊處理
Cv2.GaussianBlur(screenMat, screenMat, new OpenCvSharp.Size(5, 5), 0);

// 要比對的圖片
Mat template = Cv2.ImRead("C:\\Users\\2024-07-12.png", ImreadModes.Grayscale);

// 比對
Mat result = new Mat();
Cv2.MatchTemplate(screenMat, template, result, TemplateMatchModes.CCoeffNormed);

// 取得相似度最大的位置
Cv2.MinMaxLoc( result, out double minVal, out double maxVal, out OpenCvSharp.Point minLoc, out OpenCvSharp.Point maxLoc);

// 相似度超過 0.75
if (maxVal > 0.75) 
{
    // 移動滑鼠
    Cursor.Position = new System.Drawing.Point(maxLoc.X, maxLoc.Y);
}
    

一開始筆者在測試時相似度一直在 0.6 左右,嘗試了很久才發現要進行處理,就是上面的高斯模糊處理,如果比對結果一直不理想,可能要更換其他的處理方式。

參考資料:
GitHub - shimat/opencvsharp

留言