牙叔教程 簡單易懂javascript
查找圖片中的透明按鈕的位置java
透明按鈕是齒輪按鈕和雙人按鈕,canvas
黃色矩形是找出來的位置markdown
8.8.20-0網絡
觀察圖片, 能夠明顯的看到, 按鈕的亮度是比周圍高得多, 因此咱們能夠查找圖片中最亮的部分,工具
找到的大機率就是咱們要找的東西;學習
解決問題, 實事求是, 不一樣的需求, 不一樣的場景, 採用合適的方法;測試
若是此處的按鈕, 明度不明顯的話, 咱們就要觀察圖片, 找出咱們能夠利用的特徵,spa
好比顏色, 面積, 形狀code
本教程使用的二值化, 來提取圖片的輪廓,
有興趣的話, 你們能夠試試邊緣檢測, 提取出來的輪廓
邊緣檢測, 效果以下:
爲了找到合適的二值化閾值, 須要通過屢次測試, 因此專門寫了一個滑塊來調整閾值,
通過屢次測試, 這幾張圖片的最佳閾值在175
找圖我測試, 效率挺高的,
我專門用console.time打印了代碼的運行時長,
腳本總時長: 2555ms
保存文件兩次, 時長分別爲: 1131ms, 1104ms
也就是說, 若是不保存文件, 那麼實際上代碼執行時間: 320ms
另外, 若是找圖的時候, 能夠在不影響效果的狀況下,
能夠對圖片進行縮放, 圖片越小, 找圖效率越高,
模板圖片是越大越好, 這樣滑窗的次數會少不少,
滑動窗口的次數少了, 找圖速度就快了
一開始我是把齒輪的所有都截圖了下來, 可是有的圖片二值化後找不到齒輪,
而後我就截取了特徵最明顯的部分, 也就是相對的穩定的特徵
原來的齒輪
特徵穩定的齒輪局部
雙人
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);
複製代碼
我直接用的ps摳圖, 電腦自帶的畫圖也同樣能夠,
只要保證摳圖能用, 用什麼工具均可以
let matchingResult = images.matchTemplate(thresholdImg, templateGray, {
threshold: matchTemplateThreshold,
});
複製代碼
canvas.drawRect(left, top, left + templateWidth, top + templateHeight, paint);
複製代碼
部份內容來自網絡 本教程僅用於學習, 禁止用於其餘用途