版本: 4.1.0
人脸检测示例代码
CascadeClassifier face_cascade;
face_cascade.load("haarcascade_frontalface_default.xml");
Mat image = imread("face.jpg");
Mat image_gray;
cvtColor(image, image_gray, COLOR_BGR2GRAY);
equalizeHist(image_gray, image_gray);
vector<Rect> faces;
face_cascade.detectMultiScale(image_gray, faces);
for (size_t i = 0; i < faces.size(); i++)
{
Point center(faces[i].x + faces[i].width / 2, faces[i].y + faces[i].height / 2);
ellipse(image, center, Size(faces[i].width / 2, faces[i].height / 2), 0, 0, 360, Scalar(255, 0, 255), 4);
}
haarcascade_frontalface_default.xml
位置: sources\data\haarcascades
多尺度检测函数
void detectMultiScale(InputArray image,
std::vector<Rect>& objects,
double scaleFactor = 1.1,
int minNeighbors = 3, int flags = 0,
Size minSize = Size(),
Size maxSize = Size() );
void detectMultiScale(InputArray image,
std::vector<Rect>& objects,
std::vector<int>& numDetections,
double scaleFactor=1.1,
int minNeighbors=3, int flags=0,
Size minSize=Size(),
Size maxSize=Size() );
void detectMultiScale(InputArray image,
std::vector<Rect>& objects,
std::vector<int>& rejectLevels,
std::vector<double>& levelWeights,
double scaleFactor = 1.1,
int minNeighbors = 3, int flags = 0,
Size minSize = Size(),
Size maxSize = Size(),
bool outputRejectLevels = false );
参数 | 默认值 | 含义 |
---|---|---|
image | 输入图像 | |
objects | 被检测物体的矩形框向量组 | |
rejectLevels | ||
levelWeights | ||
scaleFactor | 1.1 | 特征图缩放系数 |
minNeighbors | 3 | |
flags | 0 | |
minSize | 被检测物体的最小尺寸 | |
maxSize | 输入图像的尺寸 | 被检测物体的最大尺寸 |
outputRejectLevels | false |
基本原理
积分图
图像是由一系列的离散像素点组成, 图像积分图中每个点的值是原图像中该点左上角的所有像素值之和.
网友评论