本章内容
haar 级联分类器,人脸识别
计算流程:
1. 创建并加载分类器
2. 读入图像,并转化成灰度图像
3. 直方图均衡化
4. 目标检测
5. 绘制检测结果
输出结果:
源码
#include <opencv2/opencv.hpp>
#include <iostream>
int main(int argc, char** argv) {
/*本章内容
haar 级联分类器,人脸识别
计算流程:
1. 创建并加载分类器
2. 读入图像,并转化成灰度图像
3. 直方图均衡化
4. 目标检测
5. 绘制检测结果
*/
cv::Mat src = cv::imread("/home/wang/dev/Image/heihei.jpeg");
cv::Mat src1 = cv::imread("/home/wang/dev/Image/books.jpg", cv::IMREAD_REDUCED_COLOR_8);
if (src.empty() || src1.empty()) {
printf("could not load images...\n");
return -1;
}
cv::imshow("box image", src);
cv::imshow("scene image", src1);cv::String haarFile = "/home/wang/dev/opencv-3.4.5/data/haarcascades/haarcascade_frontalface_alt.xml";
cv::CascadeClassifier face_cascade;
if(!face_cascade.load(haarFile)){
std::cout << " 权重导入失败" << std::endl;
return -1;
}
cv::Mat gray;
cv::cvtColor(src,gray,cv::COLOR_BGR2GRAY);
cv::Mat grayHist;
cv::equalizeHist(gray,grayHist);
/*目标检测
* api接口:CV_WRAP void detectMultiScale( InputArray image,
CV_OUT std::vector<Rect>& objects,
double scaleFactor = 1.1,
int minNeighbors = 3, int flags = 0,
Size minSize = Size(),
Size maxSize = Size() );
参数分析:
@param scaleFactor Parameter specifying how much the image size is reduced at each image scale.
@param minNeighbors Parameter specifying how many neighbors each candidate rectangle should have
to retain it.
@param flags Parameter with the same meaning for an old cascade as in the function
cvHaarDetectObjects. It is not used for a new cascade.
@param minSize Minimum possible object size. Objects smaller than that are ignored.
@param maxSize Maximum possible object size. Objects larger than that are ignored. If `maxSize == minSize` model is evaluated on single scale
*/
std::vector<cv::Rect> rects;
face_cascade.detectMultiScale(grayHist,rects,1.1,1, 0, cv::Size(40, 40)); // , 0, cv::Size(50, 50), cv::Size(200, 200)
for(int i=0; i< rects.size();i++) cv::rectangle(src,rects[i],cv::Scalar(0,255,0),4);
cv::imshow("haar 人脸检测", src);cv::waitKey(0);
return 0;
}