在OpenCV Python中實現k近鄰演算法?


k近鄰演算法(kNN)是一種簡單的監督學習分類演算法。要在OpenCV中實現kNN,您可以按照以下步驟操作:

  • 匯入所需的庫OpenCV、NumPyMatplotlib

  • 我們定義兩個類別“紅色”和“藍色”,每個類別各有25個數。然後使用隨機生成器為這兩個類別生成訓練資料。

  • 接下來,我們為每個訓練資料生成標籤。“紅色”類別數字的標籤為0,“藍色”類別數字的標籤為1。

  • 現在繪製“紅色”和“藍色”類別成員。

  • 使用隨機生成器生成一個新數字並繪製它。

  • 初始化一個KNearest物件knn並用訓練資料對其進行訓練。

  • 最後,計算knn.findNearest()以查詢新成員的類別標籤、類別標籤和最近鄰的距離。

讓我們看看下面的例子來實現k近鄰演算法。

示例

在這個例子中,我們為紅色和藍色類別分別生成和繪製25個訓練資料。

# import required libraries import cv2 import numpy as np import matplotlib.pyplot as plt # Feature set containing (x,y) values of 25 known/training data trainData = np.random.randint(0,100,(25,2)).astype(np.float32) # Labels each one either Red or Blue with numbers 0 and 1 responses = np.random.randint(0,2,(25,1)).astype(np.float32) # Take Red families and plot them red = trainData[responses.ravel()==0] plt.scatter(red[:,0],red[:,1],80,'r','^') # Take Blue families and plot them blue = trainData[responses.ravel()==1] plt.scatter(blue[:,0],blue[:,1],80,'b','s') plt.show()

輸出

執行上面的Python程式後,將生成以下輸出視窗:


示例

在這個例子中,我們為紅色和藍色類別分別生成和繪製25個訓練資料。現在我們生成一個新數字,並應用k近鄰演算法將新數字分類到紅色或藍色類別。

# import required libraries import cv2 import s numpy as np import matplotlib.pyplot aplt # Feature set containing (x,y) values of 25 known/training data trainData = np.random.randint(0,100,(25,2)).astype(np.float32) # Labels each one either Red or Blue with numbers 0 and 1 responses = np.random.randint(0,2,(25,1)).astype(np.float32) # Take Red families and plot them red = trainData[responses.ravel()==0] plt.scatter(red[:,0],red[:,1],80,'r','^') # Take Blue families and plot them blue = trainData[responses.ravel()==1] plt.scatter(blue[:,0],blue[:,1],80,'b','s') # take new point newcomer = np.random.randint(0,100,(1,2)).astype(np.float32) plt.scatter(newcomer[:,0],newcomer[:,1],80,'g','o') knn = cv2.ml.KNearest_create() knn.train(trainData, cv2.ml.ROW_SAMPLE, responses) ret, results, neighbors ,dist = knn.findNearest(newcomer, 3) print("Label of New Member: {}\n".format(results) ) print("Nearest Neighbors: {}\n".format(neighbors) ) print("Distance of Each Neighbor: {}\n".format(dist) ) plt.show()

輸出

執行上面的Python程式後,將生成以下輸出

Label of New Member: [[1.]]
Nearest Neighbors: [[0. 1. 1.]]
Distance of Each Neighbor: [[ 85. 85. 405.]]

結果顯示新數字屬於藍色類別,因為三個最近鄰中有兩個屬於藍色類別。它還將顯示以下輸出視窗:


更新於:2022年12月5日

841 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.