opencv实现图像分类python
时间: 2023-07-12 09:40:03 浏览: 269
要使用 OpenCV 进行图像分类,可以使用以下步骤:
1. 准备数据集:收集需要分类的图像,并将它们分为不同的类别。
2. 特征提取:使用 OpenCV 的特征提取函数(如 HOG、SIFT、SURF 等)从每个图像中提取特征向量。
3. 训练分类器:使用提取的特征向量和相应的标签(类别)来训练分类器(如 SVM、KNN、决策树等)。
4. 测试分类器:使用测试集中的图像来测试训练好的分类器的准确性。
下面是一个使用 OpenCV 和 SVM 进行图像分类的 Python 示例代码:
```python
import cv2
import numpy as np
# 准备数据集
train_data = []
train_labels = []
for i in range(1, 11):
for j in range(1, 6):
img = cv2.imread(f"dataset/{i}_{j}.jpg", 0)
hist = cv2.calcHist([img], [0], None, [256], [0, 256]) # 提取图像的直方图特征
train_data.append(hist)
train_labels.append(i)
# 训练分类器
svm = cv2.ml.SVM_create()
svm.setType(cv2.ml.SVM_C_SVC)
svm.setKernel(cv2.ml.SVM_LINEAR)
svm.train(np.array(train_data), cv2.ml.ROW_SAMPLE, np.array(train_labels))
# 测试分类器
test_data = []
test_labels = []
for i in range(1, 11):
for j in range(6, 11):
img = cv2.imread(f"dataset/{i}_{j}.jpg", 0)
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
test_data.append(hist)
test_labels.append(i)
test_data = np.array(test_data)
test_labels = np.array(test_labels)
_, test_acc = svm.evaluate(test_data, test_labels)
print(f"Test accuracy: {test_acc * 100}%")
```
这段代码假设有一个包含 50 张图像(每个类别 5 张)的数据集,每个图像都是灰度图像。它首先循环遍历数据集,提取每个图像的直方图特征,并将它们存储在 `train_data` 和 `train_labels` 中。接下来,它使用 `cv2.ml.SVM_create()` 创建一个 SVM 分类器,并使用 `train()` 函数对其进行训练。最后,它循环遍历测试集中的图像,提取它们的特征,并使用 `evaluate()` 函数测试分类器的准确性。
阅读全文