图像识别的水果分类knn代码
时间: 2023-09-03 13:15:12 浏览: 55
以下是一个基于KNN算法的水果分类代码示例:
```python
import cv2
import numpy as np
import os
# 加载训练数据
data_path = './fruits'
training_data, labels = [], []
for dir in os.listdir(data_path):
label = int(dir.split('_')[0])
for file in os.listdir(os.path.join(data_path, dir)):
img = cv2.imread(os.path.join(data_path, dir, file))
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_gray = cv2.resize(img_gray, (50, 50))
training_data.append(img_gray.flatten())
labels.append(label)
# 转换为numpy数组
training_data = np.array(training_data, dtype=np.float32)
labels = np.array(labels)
# 训练模型
knn = cv2.ml.KNearest_create()
knn.train(training_data, cv2.ml.ROW_SAMPLE, labels)
# 加载测试数据
test_data, test_labels = [], []
for dir in os.listdir(data_path):
label = int(dir.split('_')[0])
for file in os.listdir(os.path.join(data_path, dir)):
img = cv2.imread(os.path.join(data_path, dir, file))
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_gray = cv2.resize(img_gray, (50, 50))
test_data.append(img_gray.flatten())
test_labels.append(label)
# 转换为numpy数组
test_data = np.array(test_data, dtype=np.float32)
test_labels = np.array(test_labels)
# 测试模型
_, result, _, _ = knn.findNearest(test_data, k=3)
# 计算准确率
accuracy = (result == test_labels.reshape(-1, 1)).mean()
print('Accuracy:', accuracy)
```
该代码假设数据集中每个类别的图像都存储在一个以类别名为文件名的文件夹中,例如:
```
fruits
├── 0_apple
│ ├── apple1.jpg
│ ├── apple2.jpg
│ └── ...
├── 1_banana
│ ├── banana1.jpg
│ ├── banana2.jpg
│ └── ...
├── 2_orange
│ ├── orange1.jpg
│ ├── orange2.jpg
│ └── ...
└── ...
```
代码首先加载训练数据和标签,并将训练数据转换为numpy数组。然后,使用KNN算法训练模型。接下来,加载测试数据和标签,并将测试数据转换为numpy数组。最后,使用训练好的模型对测试数据进行预测,并计算模型的准确率。