autojs查找透明圖

牙叔教程 簡單易懂javascript

使用場景

查找圖片中的透明按鈕的位置java

效果展現

透明按鈕是齒輪按鈕和雙人按鈕,canvas

黃色矩形是找出來的位置markdown

41tmp.png1tmp.png2tmp.png3tmp.png

autojs版本

8.8.20-0網絡

原理

觀察圖片, 能夠明顯的看到, 按鈕的亮度是比周圍高得多, 因此咱們能夠查找圖片中最亮的部分,工具

找到的大機率就是咱們要找的東西;學習

解決問題, 實事求是, 不一樣的需求, 不一樣的場景, 採用合適的方法;測試

若是此處的按鈕, 明度不明顯的話, 咱們就要觀察圖片, 找出咱們能夠利用的特徵,spa

好比顏色, 面積, 形狀code

本教程使用的二值化, 來提取圖片的輪廓,

有興趣的話, 你們能夠試試邊緣檢測, 提取出來的輪廓

邊緣檢測, 效果以下: 邊緣檢測.png

步驟

  1. 灰度
  2. 二值化
  3. 摳圖
  4. 模板匹配

二值化的可視化

爲了找到合適的二值化閾值, 須要通過屢次測試, 因此專門寫了一個滑塊來調整閾值,

通過屢次測試, 這幾張圖片的最佳閾值在175 二值化.png

提升找圖效率

找圖我測試, 效率挺高的,

我專門用console.time打印了代碼的運行時長,

腳本總時長: 2555ms

保存文件兩次, 時長分別爲: 1131ms, 1104ms

也就是說, 若是不保存文件, 那麼實際上代碼執行時間: 320ms

另外, 若是找圖的時候, 能夠在不影響效果的狀況下,

能夠對圖片進行縮放, 圖片越小, 找圖效率越高,

模板圖片是越大越好, 這樣滑窗的次數會少不少,

滑動窗口的次數少了, 找圖速度就快了

模板圖片的選擇

一開始我是把齒輪的所有都截圖了下來, 可是有的圖片二值化後找不到齒輪,

而後我就截取了特徵最明顯的部分, 也就是相對的穩定的特徵

原來的齒輪 齒輪.png

特徵穩定的齒輪局部 小齒輪.png

雙人 雙人.png

代碼講解

1. 灰度二值化
runtime.images.initOpenCvIfNeeded();
importClass(org.opencv.core.Mat);
importClass(org.opencv.core.CvType);

let imgPath = "./res/4.jpg";
imgPath = files.path(imgPath);
let img = images.read(imgPath);
let grayImg = images.grayscale(img);
let threshold = 175;
let thresholdImg = images.threshold(grayImg, threshold, 255);
複製代碼
2, 摳圖

我直接用的ps摳圖, 電腦自帶的畫圖也同樣能夠,

只要保證摳圖能用, 用什麼工具均可以

3. 模板匹配
let matchingResult = images.matchTemplate(thresholdImg, templateGray, {
  threshold: matchTemplateThreshold,
});
複製代碼
4. 畫矩形
canvas.drawRect(left, top, left + templateWidth, top + templateHeight, paint);
複製代碼

聲明

部份內容來自網絡 本教程僅用於學習, 禁止用於其餘用途

相關文章
相關標籤/搜索