在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.