检测瑕疵图片的svm模型代码python
时间: 2024-10-10 13:12:30 浏览: 47
在Python中,检测图像瑕疵通常需要先将图片转换成特征表示,然后利用SVM进行分类。以下是一个基本的例子,使用OpenCV读取图片,然后用Scikit-image预处理图像和提取特征,最后训练一个SVM模型:
```python
import cv2
import numpy as np
from sklearn.svm import SVC
from skimage.feature import hog
def extract_hog_features(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hog_descriptor = hog(gray, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(2, 2))
return hog_descriptor.reshape(1, -1)
# 假设有一个瑕疵图像列表和对应正常图像列表
def load_data(normal_images_path, defect_images_path):
normal_data = []
defect_data = []
for img_name in os.listdir(normal_images_path):
img = cv2.imread(os.path.join(normal_images_path, img_name), 0)
normal_data.append(extract_hog_features(img))
for img_name in os.listdir(defect_images_path):
img = cv2.imread(os.path.join(defect_images_path, img_name), 0)
defect_data.append(extract_hog_features(img))
return np.array(normal_data), np.array(defect_data)
# 加载数据
normal_data, defect_data = load_data('path/to/normal/images', 'path/to/defect/images')
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(normal_data, defect_data, test_size=0.2, random_state=42)
# 创建SVM分类器
svm_model = SVC(kernel='linear')
# 训练模型
svm_model.fit(X_train, y_train)
# 预测测试集
predictions = svm_model.predict(X_test)
# 简单评估
accuracy = sum(predictions == y_test) / len(y_test)
print("Model Accuracy:", accuracy)
# 更详细的评估可以使用混淆矩阵或其他度量
```
注意,这只是一个基础示例,实际应用中可能还需要对图像进行更复杂的预处理,例如缩放、灰度校正、噪声去除等。同时,HOG特征并不是唯一的选择,还可以尝试其他特征提取方法,如深度学习特征。
阅读全文