首页 >> 大全

OpenCV学习代码记录——人脸检测

2023-11-27 大全 29 作者:考证青年

很久之前学习过一段时间的,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录。

代码放在码云上,地址在这里

_opencv人脸检测器_opencv人脸识别模型训练

效果

693958-20180813205314582-2118769257.gif

代码

我是直接使用自带的分类器。如果有数据,可以自己训练得到。

#include 
#include 
#include 
#include #include 
// g++ face.cpp -o face -std=c++11 -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_objdetect// 文件在opencv的安装目录下有
static const char* cascade_name = "D:\\OpenCV\\share\\OpenCV\\haarcascades\\""haarcascade_frontalface_alt2.xml";// http://wiki.opencv.org.cn/index.php/%E4%BA%BA%E8%84%B8%E6%A3%80%E6%B5%8Bvoid frameFaceDetection(cv::Mat& src, cv::CascadeClassifier& cascade,const char* showWindowName);int FaceDetection(int c,char**v)
{//cv::Mat   src,gray;   // 源图像,灰度图像cv::VideoCapture    capture;    // 视频捕获对象cv::Mat             frame;      // 视频帧cv::CascadeClassifier   cascade;    //级联分类器/**// 加载源图像const char* picpath = "../Image/sisy.jpg";if (c > 1) { picpath = v[1]; }src = cv::imread(picpath);if (src.empty()) {puts("图片加载失败!!!");return -1;}*/// 打开视频文件if (!capture.open("../Image/video.mov")) {puts("打开视频文件失败!!!");return -1;}// 加载人脸识别级联分类器文件if (!cascade.load(cascade_name)){puts("人脸识别级联分类器文件加载失败!!!");return 0;}// 创建显示窗口cv::namedWindow("src");cv::Mat src_scale;src_scale.create(cv::Size(480, 320), CV_8SC3);// 循环取帧并显示while (capture.read(frame)) {// 进行缩放cv::resize(frame, src_scale, src_scale.size());// 检测并显示frameFaceDetection(src_scale, cascade, "src");// 等待按键事件// 此处等待也为显示图像函数提供足够的时间完成显示// 等待事件可以按照CPU速度进行调节if (cv::waitKey(1) >= 0) {break;  // 按键就退出}}//cv::waitKey();cv::destroyAllWindows();return 0;
}void frameFaceDetection(cv::Mat& src,cv::CascadeClassifier& cascade,const char* showWindowName)
{std::vector   faces;cv::Mat gray;// 获取源图像的灰度图像gray.create(src.size(), CV_8UC1);cv::cvtColor(src, gray, CV_BGR2GRAY);// 使灰度图象直方图均衡化cv::equalizeHist(gray, gray);// 获取初步检测结果cascade.detectMultiScale(gray/*源图像*/,faces/*检测出的物体边缘(得到被检测物体的矩形框向量组)*/,1.1/*每一个图像尺度中的尺度参数,默认值为1.1*/,2/*每一个级联矩形应该保留的邻近个数*/,CV_HAAR_SCALE_IMAGE,cv::Size(30, 30)/*最小可能的对象的大小,小于的对象将被忽略*/);// 将检测得到的结果,绘制到原图像上for (auto face : faces) {// 绘制红色矩形cv::rectangle(src, face, cv::Scalar(0, 0, 255), 3);}// 显示图像cv::imshow(showWindowName, src);
}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了