delphi xe opencv cvhaartraining
时间: 2023-06-30 14:12:05 浏览: 156
Delphi XE 中可以使用 OpenCV 的 `cvhaartraining` 工具来进行 Haar 特征的训练。下面是一个简单的示例代码:
```
uses
..., cvtypes, cvhaartraining;
procedure TrainHaarCascade(const PosList, NegList: TStrings; const OutputFile: string);
var
Params: CvCascadeParams;
PosFile, NegFile: PCvFileStorage;
PosSample: PCvLSVMFilterObject;
NegSample: PCvLSVMFilterObject;
SampleCount: Integer;
begin
// 设置训练参数
Params := cvCascadeParams;
Params.max_depth := 1;
Params.min_hit_rate := 0.995;
Params.max_false_alarm_rate := 0.5;
Params.weight_trim_rate := 0.95;
Params.feature_type := CV_HAAR_FEATURE_TYPE_DEFAULT;
Params.win_size := cvSize(20, 20);
// 创建正样本文件
PosFile := cvOpenFileStorage(PChar(PosList.Text), nil, CV_STORAGE_READ);
// 创建负样本文件
NegFile := cvOpenFileStorage(PChar(NegList.Text), nil, CV_STORAGE_READ);
// 创建正样本对象
PosSample := cvCreateLSVMFilterObject(Params.win_size, Params.win_size);
// 加载正样本
SampleCount := cvLoadHaarTraininDataFromStorage(PosFile, nil, PosSample, nil, Params);
// 设置正样本数量
Params.positive_count := SampleCount;
// 创建负样本对象
NegSample := cvCreateLSVMFilterObject(Params.win_size, Params.win_size);
// 加载负样本
SampleCount := cvLoadHaarTraininDataFromStorage(NegFile, nil, NegSample, nil, Params);
// 设置负样本数量
Params.negative_count := SampleCount;
// 训练 Haar 特征
cvTrainHaarClassifier(&PosSample, &NegSample, &Params, CV_HAAR_DO_CANNY_PRUNING, nil);
// 保存训练结果
cvSave(OutputFile, Params);
// 释放资源
cvReleaseFileStorage(&PosFile);
cvReleaseFileStorage(&NegFile);
cvReleaseLSVMFilterObject(&PosSample);
cvReleaseLSVMFilterObject(&NegSample);
end;
```
调用 `TrainHaarCascade()` 函数并传入正样本列表、负样本列表和输出文件路径,函数会自动训练 Haar 特征并保存到输出文件中。请注意,此代码仅用于演示,实际应用中需要根据具体情况进行修改和优化。
阅读全文