delphi11 opencv 人脸识别 编写
时间: 2023-06-30 18:11:37 浏览: 112
利用opencv编写的人脸识别
下面是一个简单的Delphi11中使用OpenCV进行人脸识别的示例代码:
```delphi
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Imaging.Jpeg,
Vcl.Imaging.pngimage, Vcl.Imaging.GIFImg, Vcl.Imaging.jpeg, cvtypes, cvutils,
highgui, cv, cxImage, cxGraphics;
type
TForm1 = class(TForm)
btnLoadImage: TButton;
cxImage1: TcxImage;
btnDetectFace: TButton;
procedure btnLoadImageClick(Sender: TObject);
procedure btnDetectFaceClick(Sender: TObject);
private
{ Private declarations }
srcImage: IplImage;
faceCascade: pCvHaarClassifierCascade;
storage: pCvMemStorage;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnLoadImageClick(Sender: TObject);
var
dlg: TOpenDialog;
begin
dlg := TOpenDialog.Create(Self);
try
dlg.Filter := 'Image files (*.bmp, *.jpg, *.png)|*.bmp;*.jpg;*.png';
if dlg.Execute then
begin
cxImage1.LoadFromFile(dlg.FileName);
srcImage := cxImage1.GetIplImage;
end;
finally
dlg.Free;
end;
end;
procedure TForm1.btnDetectFaceClick(Sender: TObject);
var
i: Integer;
faceRect: CvRect;
grayImage, smallImage: IplImage;
scaleFactor: Double;
faces: pCvSeq;
begin
if Assigned(srcImage) then
begin
faceCascade := cvLoadHaarClassifierCascade('haarcascade_frontalface_alt.xml', cvSize(0, 0));
storage := cvCreateMemStorage(0);
try
cvClearMemStorage(storage);
// convert to grayscale
grayImage := cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1);
cvCvtColor(srcImage, grayImage, CV_BGR2GRAY);
// scale down for faster processing
smallImage := cvCreateImage(cvSize(srcImage.width div 2, srcImage.height div 2), IPL_DEPTH_8U, 1);
cvResize(grayImage, smallImage, CV_INTER_LINEAR);
scaleFactor := 1.1;
faces := cvHaarDetectObjects(smallImage, faceCascade, storage, scaleFactor, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(30, 30), cvSize(0, 0));
for i := 0 to faces.total - 1 do
begin
faceRect := PCvRect(cvGetSeqElem(faces, i))^;
cvRectangle(srcImage, cvPoint(faceRect.x * 2, faceRect.y * 2), cvPoint((faceRect.x + faceRect.width) * 2, (faceRect.y + faceRect.height) * 2), CV_RGB(255, 0, 0), 2, 8, 0);
end;
cxImage1.SetIplImage(srcImage);
finally
cvReleaseImage(grayImage);
cvReleaseImage(smallImage);
cvReleaseHaarClassifierCascade(faceCascade);
cvReleaseMemStorage(storage);
end;
end;
end;
end.
```
以上代码中使用了OpenCV中的Haar人脸检测算法来检测图像中的人脸,并用矩形框标出人脸的位置。具体的实现细节可以参考OpenCV的官方文档和示例程序。
阅读全文