当前位置: 首页 > 编程日记 > 正文

OpenCV中基于LBP算法的人脸检测测试代码

下面是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

相关文章:

解决getOutputStream() has already been called for this response[java io流]

getOutputStream() has already been called for this response以上异常出现的原因和解决方法&#xff1a;jsp中出现此错误一般都是在jsp中使用了输出流&#xff08;如输出图片验证码&#xff0c;文件下载等&#xff09;&#xff0c;没有妥善处理好的原因。具体的原因&#xff…

吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(1)

机器学习策略(machine learning strategy)&#xff1a;分析机器学习问题的方法。正交化(orthogonalization)&#xff1a;要让一个监督机器学习系统很好的工作&#xff0c;一般要确保四件事情&#xff0c;如下图&#xff1a;(1)、首先&#xff0c;你通常必须确保至少系统在训练集…

内行的AI盛会——北京智源大会带你洞见未来!(含日程及限量优惠)

报名请点击「阅读原文」北京国家会议中心2019年10月31日-11月1日www.baai.ac.cn/2019使用优惠码「BAAICSDN」专享7折优惠学生票仅69元&#xff0c;数量有限&#xff0c;先到先得世界AI看中国&#xff0c;中国AI看北京&#xff08;长按上图或点击「阅读原文」注册参会&#xff0…

微软职位内部推荐-Sr. Dev Lead

微软近期Open的职位:JD如果你想试试这个职位&#xff0c;请跟我联系&#xff0c;我是微软的员工&#xff0c;可以做内部推荐。发你的中英文简历到我的邮箱&#xff1a;Nicholas.lu.mail(at)gmail.com转载于:https://www.cnblogs.com/DotNetNuke/p/3885283.html

吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(2)

进行误差分析&#xff1a;可进行人工统计或可同时并行评估几个想法。进行误差分析时&#xff0c;你应该找一组错误例子&#xff0c;可能在你的开发集里或者在你的测试集里&#xff0c;观察错误标记的例子&#xff0c;看看假阳性(false positives)和假阴性(false negatives)&…

3D机器人视觉在仓储物流和工业自动化领域的应用 | AI ProCon 2019

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;随着深度学习和机器学习的发展&#xff0c;机器人已经走出实验室&#xff0c;越来越多地地应用于各行各业&#xff0c;其中&#xff0c;仓储物流和工业化领域就有许多适合机器人作业的场景环境。人眼的一大…

【转载】gdi+ 内存泄漏

【转载】http://issf.blog.163.com/blog/static/1941290822009111894413472/ 最近用GDI实现了几个自定义控件&#xff0c;但是发现存在内存泄露问题 BOOL CGdiplusBugDlg::OnEraseBkgnd(CDC* pDC) {Image* pImage Image::FromFile(L"E:\\bac.bmp");Graphics g(pDC-&…

ubuntu fctix

感觉ubuntu自在大ibus输入法用起来实在是灰常蛋痛啊&#xff0c;于是乎就换了fcitx输入法&#xff08;很多人推荐嘛&#xff09;在安装之前先说一下fcitx输入法吧。1.添加fcitx源(官方的源是旧版,不推荐使用)fcitx的ppa源&#xff0c;内含fcitx和fcitx-config,使用命令sudo ged…

深度学习中的优化简介

深度学习算法在许多情况下都涉及到优化。1. 学习和纯优化有什么不同在大多数机器学习问题中&#xff0c;我们关注某些性能度量P&#xff0c;其定义于测试集上并且可能是不可解的。因此&#xff0c;我们只是间接地优化P。我们系统通过降低代价函数J(θ)来提高P。这一点与纯优化不…

飞凌OK6410开发板移植u-boot官方最新版u-boot-2012.10.tar.bz2

Part0 准备知识 0.1 关键参数说明 0.1.1 开发板说明 OK6410是飞凌公司发布的一款开发板&#xff0c;当前有2个版本&#xff0c;OK6410-A和OK6410-B&#xff0c;我当前使用的是前者&#xff1b;前者也经历过升级&#xff0c;所以有128M ram的和较新的256内存的版本&#xff0c;n…

参数量110亿,附赠750GB数据集,Google提NLP预训练模型T5

整理 | Just&#xff0c;夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;近日&#xff0c;Google 在最新一篇共有 53 页的论文《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》中&#xff0c;提出了一个最新的预训练模型…

Linux之bash编程基本语法

在Linux运维工作中&#xff0c;我们为了提高工作效率通常会用bash编写脚本来完成某工作。今天就来为大家介绍bash的一些常见的基本语法。在讲解bash语法之前首先介绍一下bash。bash环境主要是由解释器来完成的。【解释器】&#xff1a;解释命令&#xff1a;词法分析、语法分析、…

深度学习中的卷积网络简介

卷积网络(convolutional network)也叫做卷积神经网络(convolutional neural network, CNN)&#xff0c;是一种专门用来处理具有类似网格结构的数据的神经网络。例如时间序列数据(可以认为是在时间轴上有规律地采样形成的一维网格)和图像数据(可以看作是二维的像素网格)。卷积网…

Windows下搭建PHP开发环境

PHP集成开发环境有很多&#xff0c;如XAMPP、AppServ......只要一键安装就把PHP环境给搭建好了。但这种安装方式不够灵活&#xff0c;软件的自由组合不方便&#xff0c;同时也不利于学习。所以我还是喜欢手工搭建PHP开发环境&#xff0c;需要哪个模块自己安装就行了&#xff0c…

大数据时代下的新生态、新洞察、新趋势 | 神策 2019 数据驱动大会

10 月 22 日&#xff0c;以“矩•变”为主题的神策 2019 数据驱动大会在北京维景国际大酒店顺利举行&#xff0c;来自全球大数据各大行业的领袖人物聚首北京&#xff0c;融合国际前沿技术与行业实践&#xff0c;深入探讨大数据时代下的新生态、新洞察、新趋势。 大会主题“矩•…

ckedit 文本编辑器

Ckeditor是一个功能非常强大的富文本编辑器&#xff0c;博客园有使用此编辑器&#xff0c;其功能完全可以与MS的Word媲美。 用起来也非常方便。下面是本人总结的安装步骤&#xff1a; 第一步&#xff0c;从http://ckeditor.com/download 下载ckeditor文件包 第二步&#xff0c;…

为什么我害怕数据结构学得好的程序员?

我害怕数据结构学得好的程序员&#xff0c;一跟他们讨论技术&#xff0c;我就感觉自己不是程序员&#xff0c;仅仅是在搬砖维持生活。我所拥有的编程技巧是什么&#xff1f;不就是每个程序员都会的&#xff0c;对数据库的增删改查吗&#xff1f;每一个初入职场的程序员都会。但…

Go语言基础介绍

Go是一个开源的编程语言。Go语言被设计成一门应用于搭载Web服务器&#xff0c;存储集群或类似用途的巨型中央服务器的系统编程语言。目前&#xff0c;Go最新发布版本为1.10.Go语言可以运行在Linux、FreeBSD、Mac OS X和Windows系统上。1. 结构&#xff1a;Go语言的基础组成有以…

强制退出WinForm程序之Application.Exit和Environment.Eixt

这几天在做一个把大量Infopath生成的XML数据&#xff0c;进行处理的程序&#xff0c;我用了MDI子窗体&#xff0c;每个窗体包含了各自的功能&#xff0c;如&#xff0c;遍历目录及其子目录检查文件类型并自动生成Sql语句并入库、对Infopath数据的自动检查、对数据中的某些域的替…

Oracle Study之--Oracle等待事件(3)

Oracle Study之--Oracle等待事件&#xff08;3&#xff09;Db file parallel read这是一个很容易引起误导的等待事件&#xff0c;实际上这个等待事件和并行操作&#xff08;比如并行查询&#xff0c;并行DML&#xff09;没有关系。 这个事件发生在数据库恢复的时候&#xff0c;…

Windows下通过Python 3.x的ctypes调用C接口

在Python中可以通过ctypes来调用动态库中的C接口&#xff0c;具体操作过程如下&#xff1a;1. 使用vs2013创建一个加、减、乘、除的动态库&#xff0c;并对外提供C接口&#xff0c;code内容如下&#xff1a;math_operations.hpp: #ifndef TEST_DLL_1_MATH_OPERATIONS_HPP_ #def…

如何在3天内拿下DigSci大赛的亚军?| DigSci科学数据挖掘大赛

作者 | 朱翔宇(DOTA)来源 | AI算法之心&#xff08;AIHeartForYou&#xff09;【导读】本文将基于作者在中国计算机大会方案宣讲PPT中的内容&#xff0c;给出此次比赛的完整方案&#xff0c;主要从赛题理解、建模核心思路、算法核心思想等角度阐述&#xff0c;同时对相关细节进…

如何获得Oracle系统性能统计? Oracle大型数据库系统在AIXUNIX上的实战详解 集中讨论 14...

累计读者的来信中&#xff0c;有若干位同仁谈到Oracle的性能问题。什么叫性能慢&#xff1f;怎么量化性能统计&#xff1f;问题我不一一列出了&#xff0c;下面的文字大部分来自Oracle 英文文档&#xff0c;我认为描述的极为精确&#xff0c;比我说的强。 如果有效地诊断性能问…

百度搜索查询命令——组合型

在百度上搜索一下&#xff0c;就会出现一堆关于查询搜索的命令&#xff0c;比如&#xff1a;site&#xff0c;domain&#xff0c;双引号&#xff0c;减号等等。今日&#xff0c;我简单总结一点组合型命令&#xff0c;希望对大家有帮助。 1、domain命令、减号-和的inurl组合 公式…

Delphi多线程编程中的技巧

1&#xff09;创建线程 MsgThread : TMsgThread.Create(False) ; //创建并执行线程 MsgThread : TMsgThread.Create(True) ; //创建线程后挂起 constructor Create(CreateSuspended: Boolean); 中的参数CreateSuspended表示创建后是否挂起线程。 &#xff08;2&#xff09;设置…

Ubuntu14.04下配置OpenGL及测试代码

ubuntu14.04 64位下&#xff0c;默认是没有安装OpenGL相关依赖库的&#xff0c;若安装&#xff0c;则依次执行如下几条命令即可&#xff1a; $ sudo apt-get update $ sudo apt-get install build-essential $ sudo apt-get install libgl1-mesa-dev $ sudo apt-get install li…

VarGFaceNet:地平线提出轻量级、有效可变组卷积的人脸识别网络

作者 | Mengjia Yan、Mengao Zhao、Zining Xu、Qian Zhang、Guoli Wang、Zhizhong Su译者 | 刘畅编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】为了提高用于人脸识别的轻量级网络的判别和泛化能力&#xff0c;本文提出了一种有效的可…

【TortoiseSVN使用教程】

TortoiseSVN使用教程 TortoiseSVN是一个SVN的客户端 1.Checkout Repository 首 先要Checkout服务器端的Repository&#xff0c;所谓的Checkout就是指获得服务器端指定的Repository。存储的所有文件这个 Checkout和Visual Source Safe的Checkout意义完全不一样&#xff0…

[ASP.NET MVC 小牛之路]10 - Controller 和 Action (2)

继上一篇文章之后&#xff0c;本文将介绍 Controller 和 Action 的一些较高级特性&#xff0c;包括 Controller Factory、Action Invoker 和异步 Controller 等内容。 本文目录 开篇&#xff1a;示例准备 文章开始之前&#xff0c;我们先来了解一下一个请求的发出到Action方法处…

Linux下遍历指定目录的C++实现

之前在 https://blog.csdn.net/fengbingchun/article/details/51474728 给出了在Windows遍历指定文件夹的C实现&#xff0c;这里给出在Linux下遍历目录的实现&#xff0c;Windows和Linux下的实现都是参考了OpenCV 2.x中的实现&#xff0c;OpenCV中的用法可参考https://blog.csd…