用opencv检测人眼并定位瞳孔位置

opencv中人眼中心的检测(C++) #include #include #include #include using namespace std; using namespace cv; int main(int argc, char** argv) { CascadeClassifier stFaceCascade; IplImage *pstImage = NULL; std::vector faceRe 阅读详情

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

        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<Rect>& 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.youkuaiyun.com/detail/computerme/7680383

<span style="font-size:14px;">#include "highgui.h"
#include "cv.h"
#include <iostream>
#include <stdio.h>

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<Rect> 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<Rect>::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 );
}</span>

运行结果:


Android版OpenCV图像处理技术亲自验证[二十]之眼球检测(附源码) OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,网络上一些小伙伴写的一些关于Android版OpenCV的博客,大部分都模糊不清,基本就复制粘贴的,有些甚至没有实践就直接贴上去了,这样不仅误导初学的一些小伙伴,而且被其他小伙伴转载或者复制之后,会造成更大的影响和后果。正所谓”徒错错一个,师错错一窝。为人师者慎下笔“,故此,本专栏亲自研究,实践,将调试过程中所遭所遇进行详细讲解,注意事项进行一一列举,希望能够帮助到各位初学OpenCV的小伙伴,避免走弯路,费时费力。 阅读详情

相关推荐

Python人眼视线追踪系统

使用Python+OpenCV实现实时眼动追踪,不需要高端硬件简单摄像头即可实现,效果图如下所示。 项目演示参见:https://www.bilibili.com/video/av75181965/ 项目主程序如下: import sys import cv2 import numpy as np import process from PyQt5.QtCore import QTim...

不脱发的程序猿 4万+

Android studio人脸五官检测Android opencv人脸五官检测

Android studio人脸五官检测Android人脸五官检测 样例图: 视频展示: Android opencv人脸五官识别,Android studio编译 项目下载:

babyai996的博客 1051

使用OpenCV实现人眼检测与瞳孔定位

detectMultiScale是OpenCV库中用于检测图像中物体的函数,它在人脸检测、车辆检测等多个场景中有着广泛的应用。为了能够更好地理解和使用该函数,我们将详细解释其功能以及它所接受的参数。

weixin_35749440的博客 1259

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

最近的研究要用到定位瞳孔的位置,所以上网搜了下相关的代码。总结如下:1) 定位瞳孔可以直接使用opencv中的自带的分类器(haarcascade_eye_tree_eyeglasses.xml)来实现,以前听师兄说用opencv自带的这个方法定位瞳孔不准,但我自己做了实验后发现在正面人脸的情况下定位还是很准确的,后面有图。分析了下原因,师兄是他之前实验时感觉不准有可能是他的Opencv版本还不是...

weixin_35712811的博客 1577

OpenCV实现人眼及瞳孔精确检测技术

OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉库,最初由Intel发起,目前由Willow Garage提供支持。OpenCV提供了大量的计算机视觉处理功能,包括图像处理、特征检测、运动分析、物体识别等,其API支持多种编程语言,如C++、Python等。在实现人眼检测的过程中,研究者们已经开发出了多种算法。其中一些常见的方法包括:基于特征的方法,比如使用Haar特征或HOG特征进行人眼区域的检测。基于深度学习的方法。

weixin_35995661的博客 1029

使用OpenCV实现人眼检测与瞳孔精准定位

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。计算机视觉作为AI领域的分支,主要研究如何使计算机能够从图像或视频中提取信息,并通过处理、分析来理解数字图像内容或图像序列。计算机视觉广泛应用于包括但不限于医学成像、工业自动化、视频监控和人机交互等。计算机视觉系统的开发需要依赖于图像处理算法和深度学习模型,这些技术能够提供从基础边缘检测到复杂的图像识别的能力。

weixin_36369848的博客 931

【亲测免费】 探索人眼检测与瞳孔定位:OpenCV开源项目的魅力

探索人眼检测与瞳孔定位:OpenCV开源项目的魅力 【下载地址】OpenCV人眼检测与瞳孔定位 OpenCV人眼检测与瞳孔定位本资源文件提供了一个使用OpenCV库实现人眼检测并精准定位瞳孔位置的示例代码 项目地址: https:...

gitblog_09749的博客 726

使用OpenCV实现人眼检测与瞳孔定位实战指南

图像处理涉及对图像进行分析、处理和理解的技术。它包括图像获取、显示、存储、传输、压缩、增强、恢复、分类识别、描述等操作。最基础的图像处理技术是对图像进行预处理,比如滤波去噪、直方图均衡化、图像变换等,这些是图像分析之前的准备工作。在机器学习和计算机视觉领域,分类器是一个重要的组成部分。它负责将输入数据分为预定义的类别,起到决策边界的作用。一个良好的分类器能够准确地识别和区分不同的对象或模式,这在图像处理中尤为关键。对于人脸特征检测,如眼睛、鼻子和嘴巴的检测,分类器提供了一种基于模式识别的解决方案。

weixin_30798867的博客 454

OpenCV人眼检测与瞳孔定位

OpenCV人眼检测与瞳孔定位 【下载地址】OpenCV人眼检测与瞳孔定位 OpenCV人眼检测与瞳孔定位本资源文件提供了一个使用OpenCV库实现人眼检测并精准定位瞳孔位置的示例代码 项目地址: https://gitcode....

gitblog_09813的博客 381

准确进行瞳孔检测c++win32平台 开发性好

在c++win32平台开发的 瞳孔检测程序~ 检测效果相当好~用曲线逼近法

opencv检测人眼并精准定位瞳孔

使用opencv自带的haarcascade_eye_tree_eyeglasses.xml分类器实现检测人眼,并精准地定位了瞳孔的位置。代码很简洁,易于理解。

【亲测免费】 探索视觉奥秘:基于OpenCV的人眼检测与瞳孔定位神器

探索视觉奥秘:基于OpenCV的人眼检测与瞳孔定位神器 【下载地址】OpenCV人眼检测与瞳孔定位 OpenCV人眼检测与瞳孔定位本资源文件提供了一个使用OpenCV库实现人眼检测并精准定位瞳孔位置的示例代码 项目地址: http...

gitblog_09732的博客 653

Frida提取Cocos游戏XXTEA密钥的实战方法论

XXTEA是一种轻量级分组加密算法,广泛用于移动端游戏通信保护;其128位密钥的安全性直接决定网络协议逆向成败。在Cocos引擎生态中,密钥常以静态常量、JNI动态传递或Native运行时派生三种形态存在,导致传统静态分析失效。Frida凭借跨Java/Native注入能力与内存实时观测优势,成为捕获密钥‘出生瞬间’的关键工具——尤其适用于hook xxtea_encrypt函数入口、监控JNI参数传递、设置内存断点追踪派生过程等场景。本文聚焦Cocos2d-x与Cocos Creator项目,覆盖从密钥识

weixin_33509600的博客 416

OpenCV人眼检测与瞳孔定位代码库

OpenCV人眼检测与瞳孔定位代码库 去发现同类优质开源项目:https://gitcode.com/ 简介 本代码库提供了一种使用OpenCV进行人眼检测及瞳孔定位的实现方法。通过利用OpenCV内置的haarcascade_eye_tree_eyeglasses.xml分类器,本库能够准确地检测出人眼,并进一步定位瞳孔位置。代码结构清晰,逻辑简洁,易于理解和学习。 特性 基于OpenCV的经...

gitblog_06742的博客 281

手把手教你用Simulink搭建交流异步电机矢量控制模型(附完整仿真文件)

本文提供了一份详细的Simulink仿真指南,手把手教你从零开始搭建交流异步电机矢量控制模型。内容涵盖主电路搭建、坐标变换实现、双闭环PI调节器设计、转子磁链观测器调试等核心步骤,并附有完整的仿真文件,帮助读者跨越理论到实践的鸿沟,掌握高性能电机控制系统的建模与仿真技能。

pz890123的博客 664

Verilog 并行 FIR 滤波器设计

FIR(Finite Impulse Response)滤波器是一种有限长单位冲激响应滤波器,又称为非递归型滤波器。FIR 滤波器具有严格的线性相频特性,同时其单位响应是有限长的,因而是稳定的系统,在数字通信、图像处理等领域都有着广泛的应用。

m0_61687959的博客 1604

基于QT和opencv的瞳孔定位及跟踪程序

本篇博客是基于上一篇博客《基于opencv和QT的瞳孔精确检测程序》的进一步开发和完善,实现了瞳孔坐标和位置的输出功能,本文将给出完整的瞳孔定位及跟踪程序,本文是作者的独立开发成果,谢绝所有形式的转载。 实现原理:通过上一篇博客的介绍,我们可以实现对每一帧图像进行瞳孔检测,并得到瞳孔的精确坐标,即实现了瞳孔定位的功能。为了实现瞳孔跟踪的功能,我们可以通过手动按钮记录下瞳孔当前帧的坐标,作为跟踪的

小修的博客 1万+

星链V3的2048条波束与1Tbps:多波束相控阵的工程代价

低轨卫星通信的容量提升,核心在于多波束相控阵天线的空间复用能力。相控阵通过控制大量天线单元的相位,可在同一阵面同时形成多条独立指向的波束,从而在有限频谱内成倍提升系统容量。星链V3宣称的2048条波束与1 Tbps汇聚吞吐量,正是基于这一原理:更多波束意味着更高的频率复用系数和更灵活的资源调度。但工程实现并非免费午餐,数字背后是供电、散热、重量、发射成本及运维复杂度的急剧攀升。从用户侧看,更精细的波束也带来切换频繁、低仰角衰减等新挑战。本文从多波束相控阵的基础原理出发,拆解波束形成、频谱复用和动态调度的工程

weixin_33462167的博客 346
上一篇: 当科技遇上艺术
下一篇: Luxand FaceSDK配置详解
IT修道者
IT修道者 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄17年 326粉丝 95原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值