开始了OpenCV的试水工作了。。。

1.Get ready

在OpenCV中我们会使用函数cv::CascadeClassifier 来进行人脸检测。但是在使用本函数之前我们需要添加一个XML文件对该函数进行训练。最后用一个小红色方块将人脸表示出来

(当然Apple自带的函数也是可以进行人脸检测(CIDetector )的,但是CascadeClassifier除了人脸检测还可以检测各种其他部位,超强大有木有~~)

2.如何实现

我们将用一下四步来实现人脸检测的过程。

#添加XML文件到工程中

#创建函数cv::CascadeClassifier(使用XML文件内容)

#检测一张图像中的人脸

#画一个红色小四方形

3.习惯性的上代码

#import "ViewController.h"
#import <opencv2/opencv.hpp>
#import <opencv2/imgproc/types_c.h>
#import <opencv2/imgcodecs/ios.h> @interface ViewController ()
{
cv::CascadeClassifier faceDetector;
}
@property (weak, nonatomic) IBOutlet UIImageView *imgView; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// 添加xml文件
NSString* cascadePath = [[NSBundle mainBundle]
pathForResource:@"haarcascade_frontalface_alt"
ofType:@"xml"];
faceDetector.load([cascadePath UTF8String]); //上传图片
UIImage *image = [UIImage imageNamed:@"lena1.png"];
cv::Mat faceImage;
UIImageToMat(image, faceImage); // 转为灰度
cv::Mat gray;
cvtColor(faceImage, gray, CV_BGR2GRAY); // 检测人脸并储存
std::vector<cv::Rect>faces;
faceDetector.detectMultiScale(gray, faces,1.1,,|CV_HAAR_SCALE_IMAGE,cv::Size(,)); // 在每个人脸上画一个红色四方形
for(unsigned int i= ;i < faces.size();i++)
{
const cv::Rect& face = faces[i];
cv::Point tl(face.x,face.y);
cv::Point br = tl + cv::Point(face.width,face.height); // 四方形的画法
cv::Scalar magenta = cv::Scalar(, , );
cv::rectangle(faceImage, tl, br, magenta, , , );
} self.imgView.image = MatToUIImage(faceImage);
}

4.看结果

5.友情提示

建议使用Auto Layout布局 + Image Assets管理各个分辨率的图片 + Interface Builder(xib+storyboard)构建UI,Size Classes在低版本iOS系统的表现未知。

想要这套手动适配方案,起码你的工程需要部署在iOS6+,还不用AutoLayout布局的会死的蛮惨

6.解惑

为什么一定要添加xml文件呢?

其实这个xml文件就是对人脸石识别的初始化(初始化数据by Paul Viola and later extended by Rainer Lienhart),现在已经成为一种人脸识别的标准了。

为了能够把xml文件成功倒入,我们需要把NSString object 转化为 std::string(使用UTF8String)

经过以上的准备工作后我们就可以使用方法detectMultiScale进行人脸检测了。

方法detectMultiScale有四个参数。分别为:

scaleFactor :制定循环递减的图片尺寸

minNeighbors :制定保留数据的矩形大小

CV_HAAR_SCALE_IMAGE :这是一个标志,它指定算法缩放图像,而不是检测器。它有助于实现最佳的性能

minSize :该参数指定最小可能的面部尺寸

7.没了,等待下一次

最后添加一下源代码地址吧。

基于OpenCV的人脸识别[iOS开发笔记(2)]的更多相关文章

  1. 基于 OpenCV 的人脸识别

    基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...

  2. 【计算机视觉】基于OpenCV的人脸识别

    一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...

  3. java基于OpenCV的人脸识别

    基于Java简单的人脸和人眼识别程序 使用这个程序之前必须先安装配置OpenCV详细教程见:https://www.cnblogs.com/prodigal-son/p/12768948.html 注 ...

  4. python基于OpenCV的人脸识别系统

    想获得所有的代码,请下载(来自我的CSDN): https://download.csdn.net/download/qq_40875849/11292912 主函数: from recognitio ...

  5. 基于opencv的人脸识别程序

    1. 解析opencv自带人脸识别源码(……/opencv-3.1.0/samples/cpp/facedetect.cpp) @ 操作系统:Ubuntu 15.04 OpenCV版本:3.1.0 # ...

  6. 转:基于开源项目OpenCV的人脸识别Demo版整理(不仅可以识别人脸,还可以识别眼睛鼻子嘴等)【模式识别中的翘楚】

    文章来自于:http://blog.renren.com/share/246648717/8171467499 基于开源项目OpenCV的人脸识别Demo版整理(不仅可以识别人脸,还可以识别眼睛鼻子嘴 ...

  7. 使用OpenCV进行人脸识别

    不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...

  8. 基于node.js人脸识别之人脸对比

    基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...

  9. 基于MATLAB的人脸识别算法的研究

    基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...

随机推荐

  1. linux curl命令验证服务器断点续传支持

    有个同事说,发现现在对外下载安装包的服务器不支持断点续传,我听了一阵纳闷,lighttpd server对于静态文件应该默认支持断点续传的,登机器查看lighttpd配置文件发现 对断点续传的支持被禁 ...

  2. html5写的一个时钟

    看到的一个html5写的时钟 <!doctype> <html> <head> <script> window.onload=function(){ v ...

  3. 在windows下的mysql使用

    具体可参照http://jingyan.baidu.com/article/3aed632e19b5e8701080918f.html 1.安装mysql. 直接百度搜索mysql下载.

  4. DataGridView出现大红叉--在使用多线程访问数据源时

    datagridview 的数据源操作在一个方面里面处理 不要多个地方处理 并且处理的时候要加锁 红叉 应该是多线程操作出现的. try catch  只是起到 捕获异常的功能,但是一旦出现了这种错误 ...

  5. 普及下Oracle hints语法

    普及下Oracle hints的语法:{DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */ 1.hint只能出现在诸如sel ...

  6. linux下文件加密压缩和解压的方法

    一.用tar命令 对文件加密压缩和解压 压缩:tar -zcf  - filename |openssl des3 -salt -k password | dd of=filename.des3 此命 ...

  7. PDF转WORD工具 Solid Converter PDF v9.1.6744

    Solid Converter PDF中文破解版(pdf转换成word转换器)是一款功能强大的PDF格式转换软件.Solid Converter PDF允许用户将PDF转换为Word(PDF to W ...

  8. 推送 -- error:Not get deviceToken yet

    获取不到devicetoken请检查: 1)     请检查你的pushconfig里的appkey与应用详情中是否一致 2)     bundleid有3处需要检查是否一致:a.你的应用详情中的bu ...

  9. matlab学习笔记(一)单元数组

    matlab学习笔记(一)单元数组 1.floor(x) :取最小的整数 floor(3.18)=3,floor(3.98)=3 ceil(x)  :取最大的整数 ceil(3.18)=4,ceil( ...

  10. Linux ln命令 - 建立文件/目录链接

    转自Linux ln命令 - 建立文件/目录链接 1. 使用方式:ln [option] source_file dist_file                     -f 建立时,将同档案名删 ...