1. 程式人生 > >如何在 0.1 秒,找到被渣浪坑的王思聰

如何在 0.1 秒,找到被渣浪坑的王思聰

今天我就教大家來寫一個 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