下面是OpenCV 3.3中基于CascadeClassifier类的LBP算法实现的人脸检测,从结果上看,不如其它开源库效果好,如libfacedetection,可参考 https://blog.csdn.net/fengbingchun/article/details/52964163

#include "funset.hpp"
#include <string>
#include <vector>
#include <algorithm>
#include <opencv2/opencv.hpp>namespace {const std::string images_path_detect{ "E:/GitCode/Face_Test/testdata/detection/" };
const std::vector<std::string> images_name_detect{ "1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg", "8.jpg", "9.jpg", "10.jpg","11.jpg", "12.jpg", "13.jpg", "14.jpg", "15.jpg", "16.jpg", "17.jpg", "18.jpg", "19.jpg", "20.jpg" };void save_mats()
{const int width = 200, height = 200;cv::Mat dst(height * 5, width * 4, CV_8UC3);for (int i = 0; i < images_name_detect.size(); ++i) {std::string input_image = images_path_detect + "_" + images_name_detect[i];cv::Mat src = cv::imread(input_image, 1);if (src.empty()) {fprintf(stderr, "read image error: %s\n", input_image.c_str());return;}cv::resize(src, src, cv::Size(width, height), 0, 0, 4);int x = (i * width) % (width * 4);int y = (i / 4) * height;cv::Mat part = dst(cv::Rect(x, y, width, height));src.copyTo(part);}std::string output_image = images_path_detect + "result.png";cv::imwrite(output_image, dst);
}} // namespaceint test_face_detect_LBP()
{const std::string lbp_files_path{ "E:/GitCode/Face_Test/testdata/lbpcascades/" };const std::vector<std::string> lbpcascades_files{ "lbpcascade_frontalface.xml", "lbpcascade_frontalface_improved.xml", "lbpcascade_profileface.xml" };cv::CascadeClassifier face_cascade(lbp_files_path+lbpcascades_files[0]);if (face_cascade.empty()) {fprintf(stderr, "classifier hasn't been loaded\n");return -1;}// Search for many objects in the one image.const int flags = cv::CASCADE_SCALE_IMAGE;// Smallest object size.const cv::Size min_feature_size = cv::Size(10, 10);// How detailed should the search be. Must be larger than 1.0.const float search_scale_factor = 1.1f;// How much the detections should be filtered out. This should depend on how bad false detections are to your system.// min_neighbors=2 means lots of good+bad detections, and min_neighbors=6 means only good detections are given but some are missed.const int min_neighbors = 2;const int scaled_width = 320;for (int i = 0; i < images_name_detect.size(); ++i) {std::string name = images_path_detect + images_name_detect[i];cv::Mat bgr = cv::imread(name, 1);cv::Mat gray = cv::imread(name, 0);if (!bgr.data || bgr.channels() != 3 || !gray.data || gray.channels() != 1) {fprintf(stderr, "read image fail: %s\n", name.c_str());return -1;}fprintf(stdout, "image name: %s: size(width, height): (%d, %d)\n", images_name_detect[i].c_str(), gray.cols, gray.rows);// possibly shrink the image to run much faster.cv::Mat resized, equalized;float scale = gray.cols / (float)scaled_width;if (gray.cols > scaled_width) {// Shrink the image while keeping the same aspect ratio.int scaled_height = cvRound(gray.rows / scale);cv::resize(gray, resized, cv::Size(scaled_width, scaled_height));} else {// Access the input image directly, since it is already small.resized = gray;}// standardize the brightness and contrast to improve dark images.cv::equalizeHist(resized, equalized);std::vector<cv::Rect> objects;// Detect objects in the small grayscale image.face_cascade.detectMultiScale(equalized, objects, search_scale_factor, min_neighbors, flags, min_feature_size);fprintf(stdout, "image name: %s: detect face count: %d\n", images_name_detect[i].c_str(), objects.size());// Enlarge the results if the image was temporarily shrunk before detection.if (gray.cols > scaled_width) {for (int j = 0; j < objects.size(); ++j) {objects[j].x = cvRound(objects[j].x * scale);objects[j].y = cvRound(objects[j].y * scale);objects[j].width = cvRound(objects[j].width * scale);objects[j].height = cvRound(objects[j].height * scale);}}for (int j = 0; j < objects.size(); ++j) {// Make sure the object is completely within the image, in case it was on a border.objects[j].x = std::max(objects[j].x, 0);objects[j].y = std::max(objects[j].y, 0);if (objects[j].x + objects[j].width > gray.cols) {objects[j].x = gray.cols - objects[j].width;}if (objects[j].y + objects[j].height > gray.rows) {objects[j].y = gray.rows - objects[j].height;}cv::rectangle(bgr, objects[j], cv::Scalar(0, 255, 0), 2);}std::string save_result = images_path_detect + "_" + images_name_detect[i];cv::imwrite(save_result, bgr);}save_mats();return 0;
} 

检测结果如下:

GitHub: https://github.com/fengbingchun/Face_Test

OpenCV中基于LBP算法的人脸检测测试代码相关推荐

  1. 使用 OpenCV与 HAAR 级联算法进行人脸检测和人脸识别

    AI人脸识别是一种从数字图像或视频帧中识别或验证人脸的技术.人类可以毫不费力地快速识别面部.这对我们来说是一项轻松的任务,但对计算机来说却是一项艰巨的任务.因为存在各种复杂性,例如低分辨率.遮挡.光照 ...

  2. 基于Adaboost算法的人脸检测分类器!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陈锴,Datawhale优秀学习者,中山大学数学系 人脸检测属于计 ...

  3. 基于PCA 人脸识别/人脸识别算法/人脸检测程序源码MATLAB ELM+PCA人脸识别 PCA人脸识别matlab代码 基于PCA算法的人脸识别

    1.基于PCA的人脸识别代码 2.MATLAB ELM+PCA人脸识别 2.基于PCA的人脸识别(matlab)(采用PCA算法进行人脸识别,通过抽取人脸的主要成 分,构成特征脸空间,识别时将测试图像 ...

  4. 基于深度学习的人脸检测和关键点检测推理实践(OpenCV实现,含代码)

    目录 一.任务概述 二.环境准备 三.实现步骤 3.1 Python推理 3.2 C++推理 3.2.1 环境准备 3.2.2 推理 3.3 Java推理 一.任务概述 最近项目中大量场景需要用到人脸 ...

  5. 基于Adaboost算法的车牌检测在OpenCV上的研究与实现

    目录结构 E:\Adaboost\ ---------positive\               //正样本文件夹 ---------pimages\       //正样本图片所在文件夹 --- ...

  6. 【MFC基础入门】基于Adaboost算法的车牌检测在OpenCV上的研究与实现

    目录结构 E:\Adaboost\---------positive\ //正样本文件夹---------pimages\ //正样本图片所在文件夹---------pos.dat //正样本集描述文 ...

  7. 【人脸识别(五)】:基于Haar+Adaboost的人脸检测算法,及实例教程

    人脸识别(一):Ubuntu Python安装dlib C++ library 人脸识别(二):如何使用 dlib 实现简单的人脸识别功能 人脸识别(三):使用face_recognition库实现人 ...

  8. CV:基于人工智能算法实现人脸口罩的实时检测(结合无人机可,实现实时警告提醒)

    CV:基于人工智能算法实现人脸口罩的实时检测(结合无人机可,实现实时警告提醒) 目录 输出结果 设计思路 实现代码 输出结果 实现代码 参考文章:CV:基于人工智能算法实现人脸口罩的实时检测(结合无人 ...

  9. 基于android系统的人脸检测系统设计 论文,基于Android人脸识别系统设计与实现.doc...

    基于Android人脸识别系统设计与实现 基于Android人脸识别系统设计与实现 摘要:人脸识别是公共安全领域的研究重点.随着移动互联网的快速发展,移动式终端人脸识别应用日益广泛.探讨人脸识别在An ...

最新文章

  1. 判断人工智能是否可信的“四把尺子”
  2. Oracle 9i 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程 (图)
  3. Python 技术篇-利用Office VBA实现word文档转化为pdf文档实例演示
  4. 在面试中如何展示虚拟机和内存调优技能
  5. JDK 5.0 中的泛型类型学习
  6. CVPR学习(五):CVPR2019-人体姿态
  7. idea启动日志在哪里_艹,我的日志被Intellij IDEA 控制台给“吃”了!
  8. 【云IDE】取次花丛懒回顾
  9. springboot2+shiro 重写filter接口来调用自定义ream的登录校验方式
  10. 神经网络与深度学习-课后习题
  11. 小康qq小助手 免费
  12. 股市精忠社学习计划:赋予快手更长期的价值
  13. EOJ3054-波兰式求值(递归法)
  14. 100行matlab,中国大学MOOC: Matlab中可以产生100行100列元素全是1的正确的命令是() 答案:ones(100)...
  15. 计算机vb考试程序试题,2014中职计算机VB考试试题.doc
  16. SLAM中状态估计优化退化问题(degraded optimization problem)浅析和源码实现
  17. Android 高仿美团外卖详情页
  18. 给图片中的人脸添加特效(帽子)
  19. Linux Intel HD4000外接显示器实现2K分辨率
  20. 抖音加白是什么意思?抖音报白需要什么资质

热门文章

  1. QT:(4)解决在VS15下配置QT后没有QT GUI Application选项
  2. 【camera-lidar-radar】基于卡尔曼滤波和扩展卡尔曼滤波的相机、激光雷达、毫米波雷达多传感器后融合
  3. php 空格zhuanyi,php写的将逗号、空格、回车分...-php字符转义的相关注意事项-IIS环境中防止本地用户用fsockopen进行DDOS攻击的方法_169IT.COM...
  4. Python计算机视觉——照相机模型与增强现实
  5. 数字图像处理——第九章 形态学图像处理
  6. 引用-ZIGBEE-ZSTACK网络配置相关问题
  7. sql数据库系统表和mysql系统表
  8. 【2018-01-22】HTML-表单及表单元素
  9. Sql Server统计报表案例
  10. 几个不错的开源的.net界面控件