代码头文件:
#include "opencv2/objdetect.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include
using namespace std;
using namespace cv;
objdetect.hpp:OpenCV中的对象检测模块。highgui.hpp提供了简单的界面操作:创建和操作可以显示图像的窗口,将轨迹栏添加到窗口,从磁盘或内存读取和写入映像,从相机或文件中读取视频并将视频写入文件。imgproc.hpp提供了许多处理图像的功能,如图像过滤和几何变换。
void detectAndDraw( Mat& img, CascadeClassifier& cascade, double scale)
vector faces;
Mat gray;
cvtColor( img, gray, COLOR_BGR2GRAY );
然后在我们的灰度图像上应用detectMultiScale函数。
cascade.detectMultiScale( gray, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
这个函数类似于我们在Python中使用的函数。人脸检测现在已经完成,我们需要在检测到的人脸周围绘制矩形。
for ( size_t i = 0; i < faces.size(); i++ )
{
Rect r = faces[i];
Scalar color = Scalar(255, 0, 0);
rectangle( img, cvPoint(cvRound(r.x*scale), cvRound(r.y*scale)), cvPoint(cvRound((r.x +
r.width-1)*scale), cvRound((r.y + r.height-1)*scale)), color, 3, 8, 0);
}
结果显示:
imshow( "Face Detection", img );
现在我们便可以简单地调用我们构建的人脸检测函数来实现人脸检测。
int main()
{
// Load the cascade classifier
cascade.load( "../../haarcascade_frontalcatface.xml" ) ;
double scale=1;
frame = imread('lenna.jpg', CV_LOAD_IMAGE_COLOR);
detectAndDraw( frame, cascade, scale );
return 0;
}
imread()用于加载输入图像。
进来学习一下,谢谢楼主分享。
每天都进步一点点
互相学习呀
欢迎分享
认真学习