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

代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tree/master/OpenCVTest

效果

代码

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

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/imgproc.hpp> #include <cstdio>
// 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%8B void 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<cv::Rect> 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);
}

OpenCV学习代码记录——人脸检测的更多相关文章

  1. OpenCV 学习笔记 05 人脸检测和识别

    本节将介绍 Haar 级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 本章将考虑如何将多个  Haar 级联分类器构成一个层次结构,即一个分类器能识别整体区域(如人脸) ...

  2. OpenCV学习代码记录——轮廓(contour)检测

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  3. OpenCV学习代码记录——Hough线段检测

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  4. OpenCV学习代码记录—— Snake轮廓

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  5. OpenCV 学习笔记 05 人脸检测和识别 AttributeError: module 'cv2' has no attribute 'face'

    1 环境设置: win10 python 3.6.8 opencv 4.0.1 2 尝试的方法 在学习人脸识别中,遇到了没有 cv2 中没有 face 属性.在网上找了几个方法,均没有成功解决掉该问题 ...

  6. OpenCV学习代码记录——canny边缘检测

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  7. OpenCV 学习笔记 07 目标检测与识别

    目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...

  8. 30行Python代码实现人脸检测

    参考OpenCV自带的例子,30行Python代码实现人脸检测,不得不说,Python这个语言的优势太明显了,几乎把所有复杂的细节都屏蔽了,虽然效率较差,不过在调用OpenCV的模块时,因为模块都是C ...

  9. cvSmooth函数 和 OpenCV自带的人脸检测

    记录cvSmooth函数的用法和 OpenCV自带的人脸检测. (1)cvSmooth函数 void cvSmooth( const CvArr* src, CvArr* dst,int smooth ...

随机推荐

  1. JS高级 - 面向对象4(json方式面向对象)

    把方法包在一个Json里 var p1 = { name: "唐三", sex: "男", dreamdu: { URL: "www.dreamdu. ...

  2. day8--socket文件传输

    FTP server 1.读取文件名 2.检测文件是否存在 3.打开文件 4.检测文件大小(告诉客户端发送文件的大小) 5.发送文件大小和MD5值给客户端,MD5 6.等待客户端确认(防止粘包) 7. ...

  3. .NET中JSON序列化(数据集转JSON)

    Json序列化和反序列化指的是:对象序列化为JSON,并可用于从 JSON 反序列化对象 在.net 3.5中已支持JSON,引用命名空间: using System.Web.Script.Seria ...

  4. How to uninstall Maya on a Mac

    How to uninstall Maya on a Mac Products and versions covered  By:  Support Jun 15 2018 SHARE ADD TO ...

  5. WebPack 学习:从阮神的15个DEMO开始

    WebPack 是什么 官方就一句话,打包所有的资源. 从阮神的 15 DEOM入手 Webpack Github 地址 阮神GIT 按照 ReadME 操作 npm webpack-dev-serv ...

  6. 动态规划_线性dp

    https://www.cnblogs.com/31415926535x/p/10415694.html 线性dp是很基础的一种动态规划,,经典题和他的变种有很多,比如两个串的LCS,LIS,最大子序 ...

  7. 本地搭建ELK(elasticsearch, logstash, kibana)日志收集系统

    环境准备:macos 预先安装brew包管理器 1.安装elasticsearch流程 那么,咱们先去安装java8 接着,咱们继续按照elasticsearch 接着,咱们启动elasticsear ...

  8. 洛谷P1823 音乐会的等待

    To 洛谷.1823 音乐会的等待 题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或 ...

  9. C++ 随机数rand()和srand()

    标准函数库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h中定义的一个整数,它与系统有关. 例如在我的机器上,RAND_MAX=32767.可以 ...

  10. FTP和TCP的文件传输效率对比测试分析

    前言 最近因项目需要,需要把一定数量的中等文件从开发板上传到电脑上,分别选择了FTP和TCP自定义协议两种方式进行传输,进行了简单的对比测试,故做如下记录. 测试环境 开发板:Linux,ARMv7 ...