OpenCV——人脸检测
Posted Not-Bad
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV——人脸检测相关的知识,希望对你有一定的参考价值。
OpenCV支持的目标检测的方法: 利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification)
1.加载级联分类器
CascadeClassifier cascade; cascade.load("haarcascade_frontalface_alt2.xml");
2.打开视频
VideoCapture capture(0); if (!capture.isOpened()){ return -1; }
3.对每一帧图像进行检测并标出人脸
while (true){ Mat Image, grayImage; capture >> Image; //读取当前帧 //缩小图片加快检测速度 Mat smallImg(cvRound(Image.rows / 2.0), cvRound(Image.cols / 2.0), CV_8UC1); //处理图像 grayImage.create(Image.size(), Image.type()); cvtColor(Image, grayImage, CV_BGR2GRAY); resize(grayImage, smallImg, smallImg.size(), 0, 0, INTER_LINEAR); equalizeHist(smallImg, smallImg); vector<Rect> rect; cascade.detectMultiScale(smallImg, rect); for (int i = 0; i < rect.size(); i++) { Point center; //圆心 int radius; //圆的半径 //由于smallImg是Image的1/2,检测smallImg在Image上绘制圆,要将圆的各类信息扩大一倍 center.x = cvRound((rect[i].x + rect[i].width * 0.5)) * 2; center.y = cvRound((rect[i].y + rect[i].height * 0.5)) * 2; radius = cvRound((rect[i].width + rect[i].height) * 0.25) * 2; circle(Image, center, radius, CV_RGB(255, 0, 0), 2); //绘制圆形 } imshow("人脸识别", Image); if (waitKey(30) >= 0)break; }
OK,就是这样
以上是关于OpenCV——人脸检测的主要内容,如果未能解决你的问题,请参考以下文章
opencv代码没有检测到人脸的数量也没有在人脸周围放一个圆圈