OpenCV3.9训练级联分类器的代码,Python
时间: 2023-11-19 07:13:46 浏览: 32
以下是使用OpenCV 3.9训练级联分类器的Python代码示例:
```python
import cv2
import os
# 设置正样本和负样本目录路径
pos_dir_path = "path/to/positive/images"
neg_dir_path = "path/to/negative/images"
# 设置级联分类器输出文件路径
cascade_dir = "path/to/cascade/folder"
cascade_file_path = os.path.join(cascade_dir, "cascade.xml")
# 设置Haar特征参数
width, height = 24, 24
min_scale, max_scale = 1.1, 2.5
min_neighbors = 3
min_size = (24, 24)
max_size = (48, 48)
# 获取正样本和负样本图像列表
pos_images = [os.path.join(pos_dir_path, f) for f in os.listdir(pos_dir_path)]
neg_images = [os.path.join(neg_dir_path, f) for f in os.listdir(neg_dir_path)]
# 创建正样本和负样本描述符文件
pos_desc_file = os.path.join(cascade_dir, "pos_desc.dat")
neg_desc_file = os.path.join(cascade_dir, "neg_desc.dat")
pos_desc = open(pos_desc_file, "w")
neg_desc = open(neg_desc_file, "w")
# 提取正样本和负样本Haar特征描述符
for image_file in pos_images:
img = cv2.imread(image_file, cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (width, height))
hog = cv2.HOGDescriptor((width, height), (16, 16), (8, 8), (8, 8), 9)
desc = hog.compute(img)
for d in desc:
pos_desc.write(str(d[0]) + " ")
pos_desc.write("\n")
for image_file in neg_images:
img = cv2.imread(image_file, cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (width, height))
hog = cv2.HOGDescriptor((width, height), (16, 16), (8, 8), (8, 8), 9)
desc = hog.compute(img)
for d in desc:
neg_desc.write(str(d[0]) + " ")
neg_desc.write("\n")
pos_desc.close()
neg_desc.close()
# 训练级联分类器
cmd = "opencv_traincascade -data {} -vec {} -bg {} -numPos {} -numNeg {} -numStages 10 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numThreads 8 -w {} -h {} -minSize {} -maxSize {} -mode ALL".format(cascade_dir, pos_desc_file, neg_desc_file, len(pos_images), len(neg_images), width, height, min_size, max_size)
os.system(cmd)
```
请确保安装了OpenCV 3.9及以上版本和必要的依赖项,例如numpy。该代码将提取正样本和负样本的HOG特征描述符,并使用OpenCV的`opencv_traincascade`工具训练级联分类器。请根据实际情况更改文件路径和参数。