如何在 0.1 秒,找到被渣浪坑的王思聰
阿新 • • 發佈:2018-11-25
今天我就教大家來寫一個 Python 小程式,用來在眾多相似的圖片中,快速的找出我們的王校長。程式最後會用紅色框框畫出識別出的王校長,下圖就是我們最後程式的結果。
程式很簡單總共也不到 30 行的程式碼量,主要用到的庫有 OpenCV 和 matplotlib。
OpenCV
OpenCV 的全稱是 Open Source Computer Vision Library,是一個跨平臺的計算機視覺庫。OpenCV 是由英特爾公司發起並參與開發,以 BSD 許可證授權發行,可以在商業和研究領域中免費使用。OpenCV 可用於開發實時的影象處理、計算機視覺以及模式識別程式。
在 Python 中你可以通過 pip install oepncv-python 來安裝 OpenCV 庫。
import cv2 from matplotlib import pyplot as plt # 獲取王思聰圖片樣本 template = cv2.imread('wangsicong.png') # 設定與鴨子同等大小,並採用插值 inter_cubic 的方式進行重取樣 template = cv2.resize(template, (31, 31), interpolation=cv2.INTER_CUBIC) # 原圖 img_rgb = cv2.imread('image.jpg') # 識別結果 res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF)
程式首先匯入所需的庫,然後再通過 cv2.imread 函式把我們需要識別的圖片和樣本先讀取到,隨後再使用 matchTemplate 函式來識別我們的圖片。相應的程式碼裡我都有註釋。
通過 matchTemplate 函式我們可以得到一個識別結果 res,然後再通過這個變數我們可以獲取到識別的座標,最後我們用 cv2.rectangle 這個畫長方形的函式,把王校長用紅框標記出來,具體程式碼如下。
# 監測目標寬和高 w, h = template[:,:,0].shape[::-1] print(w, h) # print(w, h) # 從匹配結果中得到一個錨 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 畫正方形 top_left = max_loc bottom_right = (top_left[0] + w, top_left[1] + h) imgplt = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2RGB) cv2.rectangle(imgplt, top_left, bottom_right, 255, 2) plt.imshow(imgplt) plt.title('Detected results'), plt.xticks([]), plt.yticks([]) plt.savefig("filename.png") plt.show()
最後我們再寫個 time 函式來計算花費的時間。
0.1 秒的時間內我們就把王校長給找出來,並且用紅框標記出來。
完整程式碼: 連結: https://pan.baidu.com/s/1nUePH49q3WcijY-Khc_PrA 提取碼: kbim