OpenCV3.4.14训练级联分类器的代码,用pycharm写代码
时间: 2024-05-03 13:18:24 浏览: 121
以下是使用OpenCV3.4.14训练级联分类器的Python代码示例:
```python
import cv2
# 设置正样本和负样本路径
pos_path = "path/to/positive/images/"
neg_path = "path/to/negative/images/"
# 设置级联分类器参数
params = cv2.CascadeClassifierParams()
params.minHitRate = 0.995
params.maxFalseAlarmRate = 0.5
params.weightTrimRate = 0.95
params.maxDepth = 1
params.maxWeakCount = 100
# 创建正样本和负样本列表
pos_list = []
neg_list = []
# 遍历正样本文件夹,将每个图像路径添加到列表中
for filename in os.listdir(pos_path):
if filename.endswith(".jpg"):
pos_list.append(pos_path + filename)
# 遍历负样本文件夹,将每个图像路径添加到列表中
for filename in os.listdir(neg_path):
if filename.endswith(".jpg"):
neg_list.append(neg_path + filename)
# 创建正样本和负样本Mat对象
pos_mat = cv2.imread(pos_list[0])
neg_mat = cv2.imread(neg_list[0])
# 获取正样本和负样本Mat对象的宽度和高度
width, height, _ = pos_mat.shape
# 创建正样本和负样本的大小
pos_size = (width, height)
neg_size = (width, height)
# 创建正样本和负样本的Mat对象列表
pos_mats = [cv2.resize(cv2.imread(filename), pos_size) for filename in pos_list]
neg_mats = [cv2.resize(cv2.imread(filename), neg_size) for filename in neg_list]
# 创建正样本和负样本的矩阵
pos_mat_array = np.array([cv2.cvtColor(mat, cv2.COLOR_BGR2GRAY) for mat in pos_mats])
neg_mat_array = np.array([cv2.cvtColor(mat, cv2.COLOR_BGR2GRAY) for mat in neg_mats])
# 创建正样本和负样本的标签
pos_labels = np.ones(pos_mat_array.shape[0], dtype=np.int32)
neg_labels = np.zeros(neg_mat_array.shape[0], dtype=np.int32)
# 将正样本和负样本的Mat对象合并
mat_array = np.concatenate((pos_mat_array, neg_mat_array), axis=0)
# 将正样本和负样本的标签合并
labels = np.concatenate((pos_labels, neg_labels), axis=0)
# 创建级联分类器
cascade_classifier = cv2.CascadeClassifier()
# 训练级联分类器
cascade_classifier.train(mat_array, labels, params=params)
# 保存级联分类器
cascade_classifier.save("path/to/cascade/classifier.xml")
```
请注意,此代码仅提供参考,并且可能需要根据您的特定情况进行修改。此外,为了使用此代码,您需要将正样本和负样本图像存储在指定的路径中,并将级联分类器保存到指定的路径中。
阅读全文