最近的研究要用到定位瞳孔的位置,所以上网搜了下相关的代码。总结如下:

1) 定位瞳孔可以直接使用opencv中的自带的分类器(haarcascade_eye_tree_eyeglasses.xml)来实现,以前听师兄说用opencv自带的这个方法定位瞳孔不准,但我自己做了实验后发现在正面人脸的情况下定位还是很准确的,后面有图。分析了下原因,师兄是他之前实验时感觉不准有可能是他的Opencv版本还不是很高,我这里用的是opencv2.4.4,相信opencv也在它的后续版本中不断的优化它的Machine learning中相关库以提高准确率。

当然,在复杂情况下的人眼精准定位本身就是一个热门的研究课题。所以如果是复杂情况下的精准定位,opencv可能就没那么给力了。

2)用opencv中检测人脸、眼睛、嘴巴等都是用的CascadeClassifier分类器,具体使用时可以使用C的函数,也可以使用opencv中使用C++封装好的类。下面是它们检测目标时的函数形式(从opencv官网复制的)

C:CvSeq* cvHaarDetectObjects(const CvArr* image, CvHaarClassifierCascade* cascade,CvMemStorage* storage, double scale_factor=1.1, int min_neighbors=3, int flags=0, CvSize min_size=cvSize(0,0), CvSize max_size=cvSize(0,0) )

C++:void CascadeClassifier::detectMultiScale(const Mat& image, vector& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size())

这两者最大的区别在于,用C封装的函数要自己手动分配内存,而用C++的形式则不用自己去分配内存,这就是很多同学在网上找到的代码有些要分配内存,有些又不用分配内存的原因。显然C++的形式更简洁,所以我下面的代码也是用的C++的函数。

直接上代码,注意下面的haarcascade_eye_tree_eyeglasses.xml文件在opencv安装目录下的data文件夹中。

完整的代码在http://download.csdn.net/detail/computerme/7680383

#include "highgui.h"

#include "cv.h"

#include

#include

using namespace std;

using namespace cv;

void DetectAndDraw(IplImage* img, CascadeClassifier& cascade);

//String cascadeName = "haarcascade_frontalface_alt.xml";

String cascadeName = "haarcascade_eye_tree_eyeglasses.xml";//nestedCascadeName

int main( )

{

CascadeClassifier cascade;

cascade.load( cascadeName );

cvNamedWindow( "result", 1 );

IplImage* iplImg = cvLoadImage("1.jpg");

DetectAndDraw( iplImg, cascade );

cvWaitKey(0);

cvDestroyWindow("result");

return 0;

}

void DetectAndDraw(IplImage* img, CascadeClassifier& cascade)

{

int i = 0;

double t = 0;

vector faces;

const static Scalar colors[] =  { CV_RGB(0,0,255),

CV_RGB(0,128,255),

CV_RGB(0,255,255),

CV_RGB(0,255,0),

CV_RGB(255,128,0),

CV_RGB(255,255,0),

CV_RGB(255,0,0),

CV_RGB(255,0,255)} ;

IplImage* gray = cvCreateImage(cvGetSize(img),8,1);

cvCvtColor( img, gray, CV_BGR2GRAY );

cvEqualizeHist( gray, gray );

t = (double)cvGetTickCount();

cascade.detectMultiScale( gray , faces,

1.1, 2, 0

//|CV_HAAR_FIND_BIGGEST_OBJECT

//|CV_HAAR_DO_ROUGH_SEARCH

|CV_HAAR_SCALE_IMAGE

,

Size(30, 30) );

t = (double)cvGetTickCount() - t;

printf( "detection time = %g ms\n", t/((double)cvGetTickFrequency()*1000.) );

for( vector::const_iterator r = faces.begin(); r != faces.end(); r++, i++ )

{

Point center;

Scalar color = colors[i%8];

int radius;

//center可以作为瞳孔的坐标

center.x = cvRound(r->x + r->width*0.5);

center.y = cvRound(r->y + r->height*0.5);

//radius = (int)(cvRound(r->width + r->height)*0.25);

radius =2;

cvCircle( img, center, radius, color, 3, 8, 0 );

cvShowImage( "result", img );

}

cvShowImage( "result", img );

}

运行结果:

网址:http://blog.csdn.net/computerme/article/details/38142125

opencv获取人脸眼镜位置_用opencv检测人眼并定位瞳孔位置相关推荐

  1. opencv获取图片像素坐标_利用OpenCV从图片中提取矩形并标注坐标(室内平面地图)(一)

    ​某城市会展中心室内地图 背景 一名室内设计师的日常工作从设计一张会展地图开始.常常有这样的场景:划分除规范的展位后,进入销售阶段,频繁的需要修改这张地图,如展示拆分.合并.换位置.标记已交易. 问题 ...

  2. 基于深度学习 利用目标检测的方法定位瑕疵位置

    利用目标检测的方法定位瑕疵位置 通过语义分割的方法分割瑕疵(使用传统方法,如二值化等方法分割亦可) 图像分类的方法判断类别 问题:检测手机屏幕表面的瑕疵,在图中画出瑕疵位置并标明瑕疵种类.Screen ...

  3. python人脸识别理论_使用OpenCV和Python进行人脸识别

    介绍 人脸识别是什么?或识别是什么?当你看到一个苹果时,你的大脑会立刻告诉你这是一个苹果.在这个过程中,你的大脑告诉你这是一个苹果水果,用简单的语言来说就是识别.那么什么是人脸识别呢?我肯定你猜对了. ...

  4. opencv中mean函数耗时_使用OpenCV进行人脸对齐

    在人脸识别项目中,如果图片中人脸的方向各不一样且相差很大,这样会影响人脸识别的准确率.所以在实际人脸检测项目中,在人脸识别的前一步往往会先进行人脸对齐.人脸对齐可以看作是数据normalization ...

  5. 七脉轮位置_能量疗愈 | 七个脉轮的位置与功能

    七個脈輪的位置 圖7-2呈現的是在身體上七個主要脈輪圖的位置,對應著身體主要神經叢的區域. 放射粒子專家大衛·坦斯利博士(David Tansley)在他的書中<放射粒子與人類的精微體>( ...

  6. opencv获取mat的指针_数字图像处理之opencv中Mat数据操作

    数字图像处理其实就是处理二维矩阵数据.利用opencv来学习处理算法是一种比较好的方式.学习opencv,主要就是调用其中的图像处理函数来实现各种操作.如果要得到想要的处理结果,还需要对图像处理算法有 ...

  7. opencv python 识别视频水印_[python opencv 计算机视觉零基础到实战]二十二、给视频制作浮动的带感水印...

    一.学习目标 了解浮游水印如何实现 了解鬼畜水印效果如何实现 二.了解使用OpenCV制作视频特效 2.1 读取视频 首先我们需要准备一个视频素材,我的路径是'D:\test\02.mp4',使用Vi ...

  8. opencv和python的区别_所有这些OpenCV Python接口之间有何不同?

    拉风的咖菲猫 OpenCV正式发布了两种类型的Python接口,cv和cv2.简历:我开始工作cv.这样,所有OpenCV数据类型都将保留下来.例如,加载时,图像的格式cvMat与C ++中的相同.对 ...

  9. c++ opencv 通过网络连接工业相机_使用OpenCV进行手势控制游戏+源码分享

    前期文章链接: 霍夫变换--形状特征提取算法:车道线检测 开源自动驾驶汽车数据集 基于深度学习和神经网络的重要基础及方法概要 深度学习背后的数学思想 正文: 在本文中,您将了解使用OpenCV在Pyt ...

  10. python opencv模板匹配多目标_基于opencv的多目标模板匹配

    利用opencv进行多目标模板匹配,只要是利用其matchTemplate函数,但在多目标(这里是讨论目标图片中不同大小模板的匹配),以下贴出代码和图片,供大家参考: #include #includ ...

最新文章

  1. android调用h5预加载图片,使用HTML5的页面资源预加载(Link prefetch)功能加速你的页面加载速度...
  2. java接口测试工具_接口测试基础了解篇
  3. 信息系统帐号密码管理规定_企业内部控制应用指引第 18 号——信息系统
  4. mysql触发器中case语句_一个很好的触发器例子(case when)
  5. Linux光盘检测,qpxtool
  6. Spring之AOP(面向切面编程)_入门Demo
  7. (78)FPGA内部资源与FPGA开发流程-面试必问(二)(第16天)
  8. 锂电池接线方法图_锂电池制浆工艺(2)——制浆设备种类及特征
  9. BP神经网络从理论到应用(一):C++实现
  10. github上开源的UVCCamera为什么不能正常运行
  11. 如何判断自己的操作系统是32位还是64位?
  12. windows优化大师8周年纪念版_P5SPS4体验版上线|青之驱魔师10周年纪念新卷发售【搞趣日报】...
  13. 你需要一个什么样的网站开发流程?
  14. js中判断是否为图片以及常见图片后缀
  15. java npv_java 实现Excel irr计算(改进版)
  16. 面向对象之继承、查找顺序
  17. 百度网盘完美不限速下载,60MB/s,卢本伟修改!
  18. 2.1 SSD算法理论
  19. 百度搜索结果网站排名因素
  20. obs windows 编译 obs browser

热门文章

  1. 4.数据结构 --- 串
  2. 41.MySQL 主从复制, 双主热备
  3. 7.UNIX 环境高级编程--进程环境
  4. 18. RSS订阅(RSS Feeds)and price rule
  5. 73. 文件上传(2)
  6. PADS 改变图纸和图页边界大小
  7. XManager连接CentOS6.5
  8. 带标签的 break 和 continue (Java)
  9. 二叉树的非递归遍历(转载)
  10. android自定义布局中的平滑移动