OpenCV机器学习运用之KNN简单完成
作者头像
  • Melinda_NSJE
  • 2020-05-12 20:00:10 0

回顾

在《OpenCV机器学习运用之KNN初解》中,我们介绍了OpenCV中KNN算法的基本概念,包括KNN算法的三个关键要素以及其工作流程。本节我们将使用OpenCV的相关API来实现KNN算法的一个简单示例。

KNN简单实现

我们将按照机器学习的一般步骤来实现一个简单的KNN算法,具体步骤包括:设置训练数据、初始化KNN模型、训练模型以及进行预测。

设置训练数据

为了方便观察,我们创建了一个512x512的测试图像,并在图像上随机绘制了50个点,分为红色和蓝色两类。我们通过计算点的横纵坐标是否大于512来进行分类,这样可以将50个点分别绘制在图像的左上部分和右下部分。以下是具体的代码实现:

```python

创建测试图像

image = np.zeros((512, 512, 3), dtype=np.uint8)

绘制50个点

for _ in range(50): x = np.random.randint(0, 512) y = np.random.randint(0, 512) if x < 256 and y < 256: color = (0, 0, 255) # 红色 else: color = (255, 0, 0) # 蓝色 cv2.circle(image, (x, y), 5, color, -1)

显示图像

cv2.imshow("Training Data", image) cv2.waitKey(0) ```

初始化KNN模型

OpenCV的机器学习模块ml已经封装好了KNN模型,我们只需要调用cv2.ml.KNearest_create()方法来创建一个KNN模型对象。

```python

初始化KNN模型

knn = cv2.ml.KNearest_create() ```

训练模型

有了KNN模型对象后,我们可以使用train()函数对其进行训练。训练函数需要传入训练数据和对应的标签。

```python

训练模型

knn.train(traindata, cv2.ml.ROWSAMPLE, train_labels) ```

进行预测

训练完成后,我们可以使用findNearest()方法来进行预测。该方法需要传入待测试的数据以及K值。以下是完整的预测代码:

```python

准备待测试的数据

test_data = np.array([[200, 200], [300, 300]], dtype=np.float32)

进行预测

ret, result, neighbors, dist = knn.findNearest(test_data, k=5)

打印预测结果

print(result) ```

预测完成后,我们可以将预测的点绘制在图像中,以便于观察。我们使用不同的颜色来区分预测的类别,这样可以更容易地识别预测结果。

```python

显示预测结果

for i in range(len(testdata)): x, y = int(testdata[i][0]), int(test_data[i][1]) if result[i] == 0: # 预测为红色 color = (0, 0, 255) else: # 预测为蓝色 color = (255, 0, 0) cv2.rectangle(image, (x-5, y-5), (x+5, y+5), color, -1)

cv2.imshow("Prediction Result", image) cv2.waitKey(0) ```

总结

本节我们通过使用OpenCV的API实现了KNN算法的一个简单示例。我们回顾了上一节的内容,并加深了对KNN算法的理解。通过这一过程,我们掌握了如何设置训练数据、初始化KNN模型、训练模型以及进行预测的基本步骤。

    本文来源:图灵汇
责任编辑: : Melinda_NSJE
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
运用机器完成简单OpenCV学习KNN
    下一篇