opencv的svm图片识别代码实现,已分类好两种图片集,直接套用svm模型代码python
时间: 2024-10-09 21:06:03 浏览: 114
在Python中使用OpenCV (Open Source Computer Vision Library) 和 SVM (Support Vector Machine) 进行图像识别,首先需要准备已经分类好的训练数据集。下面是一个简单的步骤概述:
1. **数据预处理**:
- 收集和标记你的两类图片集。
- 对每张图片进行必要的预处理,如缩放到固定大小、灰度化、归一化等,以便于输入到SVM。
```python
import cv2
from sklearn import svm
from skimage.feature import hog
# 预处理函数
def preprocess_image(img_path):
img = cv2.imread(img_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
resized_img = cv2.resize(gray, (64, 64)) # 使用64x64作为示例大小
return resized_img
# 获取特征向量
features = []
labels = []
for folder in ['category1', 'category2']:
for img_name in os.listdir(os.path.join('data', folder)):
img_path = os.path.join('data', folder, img_name)
feature_vector = hog(preprocess_image(img_path), orientations=9, pixels_per_cell=(8, 8))
features.append(feature_vector)
labels.append(folder) # 假设类别标签是folder名称
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
```
2. **创建并训练SVM模型**:
- 使用Scikit-Learn库创建SVM分类器。
- 分别选择线性核(linear)、多项式核(poly)或高斯径向基函数(rbf)等,这里以线性核为例。
```python
svm_classifier = svm.LinearSVC()
svm_classifier.fit(X_train, y_train)
```
3. **预测新图片**:
- 对新的图片应用预处理函数,并计算其特征向量。
- 使用训练好的SVM模型进行预测。
```python
new_img_path = 'path_to_new_image.jpg'
new_feature_vector = hog(preprocess_image(new_img_path), orientations=9, pixels_per_cell=(8, 8))
prediction = svm_classifier.predict([new_feature_vector])
print(f"Predicted category: {prediction[0]}")
```
4. **评估性能**:
- 可以通过交叉验证或独立测试集来评估模型的准确性和性能。
```python
accuracy = svm_classifier.score(X_test, y_test)
print("Accuracy:", accuracy)
```
阅读全文