delphi-opencv Haar 对比 代码
时间: 2023-07-24 19:10:18 浏览: 138
以下是使用 Delphi-OpenCV 进行 Haar 特征对比的示例代码:
```delphi
uses
CvHaarTraining, CvHaarDetectObjects;
procedure CompareHaarFeatures(const Image1, Image2: string; const XMLFile: string);
var
Img1, Img2: pIplImage;
Cascade: pCvHaarClassifierCascade;
Storage: pCvMemStorage;
Faces1, Faces2: pCvSeq;
i, j: Integer;
Feature1, Feature2: pSingle;
Similarity: Single;
begin
// 读取图像
Img1 := LoadImage(Image1);
Img2 := LoadImage(Image2);
// 加载 Haar 特征分类器
Cascade := Load(XMLFile);
// 对图像进行人脸检测
Storage := cvCreateMemStorage(0);
Faces1 := HaarDetectObjects(Img1, Cascade, Storage);
Faces2 := HaarDetectObjects(Img2, Cascade, Storage);
// 对比人脸特征
for i := 0 to Faces1.total - 1 do
begin
for j := 0 to Faces2.total - 1 do
begin
// 提取 Haar 特征向量
Feature1 := ExtractHaarFeatures(Img1, Faces1.ptr[i], Cascade);
Feature2 := ExtractHaarFeatures(Img2, Faces2.ptr[j], Cascade);
// 比较两个特征向量的相似度
Similarity := CompareHist(Feature1, Feature2, CV_COMP_CORREL);
// 输出比较结果
if Similarity > 0.8 then
Writeln('Face ', i + 1, ' in Image 1 is similar to Face ', j + 1, ' in Image 2 (similarity = ', Similarity, ')');
end;
end;
// 释放资源
cvReleaseMemStorage(@Storage);
cvReleaseHaarClassifierCascade(@Cascade);
cvReleaseImage(@Img1);
cvReleaseImage(@Img2);
end;
```
在上述代码中,`Image1` 和 `Image2` 分别为待比较的两张图像的文件路径,`XMLFile` 为 Haar 特征分类器的 XML 文件路径。在人脸检测和特征比较的过程中,我们使用了 Delphi-OpenCV 中提供的 `HaarDetectObjects`、`ExtractHaarFeatures` 和 `CompareHist` 等函数。最后,我们根据比较结果输出相似度较高的人脸矩形区域的编号。
阅读全文