• wwwflying
    了解作者
  • C/C++
    开发工具
  • 1.6MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 8
    下载次数
  • 2017-10-07 21:18
    上传日期
本代码是瞳孔检测,利用高斯平滑减小噪声,直方图均衡化增强对比度,二值化突出眼睛的特征,Hough变换画圆找瞳孔。本代码是利用QT做的界面,经过试验,效果良好。可直接使用。
pupiltrack.rar
  • build-pupiltrack2-Desktop_Qt_5_9_0_MinGW_32bit-Debug
  • debug
  • moc_widget.o
    411.1KB
  • moc_predefs.h
    9.7KB
  • haarcascade_mcs_lefteye.xml
    759.5KB
  • Myhaar_adaboost2.xml
    29.2KB
  • haarcascade_eye_tree_eyeglasses1070.xml
    1MB
  • main.o
    489.3KB
  • pupiltrack2.exe
    1.8MB
  • haarcascade_eye_tree_eyeglasses588.xml
    587.6KB
  • moc_widget.cpp
    3.8KB
  • widget.o
    1013.7KB
  • Lthreshold.ini
    22B
  • My_haarcascade_eyecascade.xml
    587.6KB
  • release
  • Makefile.Release
    46.3KB
  • haarcascade_mcs_lefteye.xml
    759.5KB
  • Myhaar_adaboost2.xml
    29.2KB
  • haarcascade_eye_tree_eyeglasses1070.xml
    1MB
  • .qmake.stash
    995B
  • ui_widget.h
    4.1KB
  • haarcascade_eye_tree_eyeglasses588.xml
    587.6KB
  • Makefile
    29.4KB
  • My_haarcascade_eyecascade.xml
    587.6KB
  • Makefile.Debug
    46.2KB
  • pupiltrack2
  • detectanddisplay.h
    10.3KB
  • widget.ui
    4.7KB
  • main.cpp
    175B
  • pupiltrack2.pro
    2.4KB
  • widget.cpp
    11.5KB
  • widget.h
    587B
  • pupiltrack2.pro.user
    101.6KB
  • imgprocess.h
    1.3KB
  • mat2qimage.h
    1.2KB
内容介绍
#include "widget.h" #include "ui_widget.h" #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <vector> #include <QSettings> #include <QTextCodec> #include <QDebug> #include "opencv2/objdetect/objdetect.hpp" #include "detectanddisplay.h" #include "mat2qimage.h" #include "iostream" #include "imgprocess.h" #include <QFileDialog> #include "QString" ///////////////////////用于打开文件路径 #include <QFileDialog> #include <QMessageBox> /////////////////////// using namespace std; using namespace cv; Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; } int Lthreshold=50; int Rthreshold=50; /* int setLIniFile() { QString strPath = QCoreApplication::applicationDirPath(); if(strPath.right(1) != "/" && strPath.right(1) != "\\") { strPath = strPath + "/"; } //m_sTmp = strPath.toStdString(); //g_szCurModule = m_sTmp.c_str(); //m_strCFGPath.sprintf("%s%s", g_szCurModule, PATHOFQUSTION); strPath += "Lthreshold.ini"; QSettings *readCFG = new QSettings(strPath, QSettings::IniFormat); QString g_strAnYes; readCFG->setIniCodec(QTextCodec::codecForName("GBK")); QString strLini = "Lthreshold"; QString strvalue ="/value"; g_strAnYes = readCFG->value(strLini+strvalue).toByteArray(); //QSettings *settings = new QSettings ("Lthreshold",QSettings::IniFormat); //int Lthreshold=settings->value("Lthreshold",50).toInt(); //qDebug() <<g_strAnYes<<strLini; return g_strAnYes.toInt(); //delete settings; } int setRIniFile() { QString strPath = QCoreApplication::applicationDirPath(); if(strPath.right(1) != "/" && strPath.right(1) != "\\") { strPath = strPath + "/"; } strPath += "Rthreshold.ini"; QSettings *readCFG = new QSettings(strPath, QSettings::IniFormat); QString g_strAnYes; readCFG->setIniCodec(QTextCodec::codecForName("GBK")); QString strLini = "Rthreshold"; QString strvalue ="/value"; g_strAnYes = readCFG->value(strLini+strvalue).toByteArray(); //qDebug() <<g_strAnYes<<strLini; return g_strAnYes.toInt(); //delete settings; } */ void ImgProcess::DisplayEye()//将两个眼睛分开 { detectAndDisplay(inimg, drawing_box0,drawing_box1); //outimg=inimg; if(drawing_box0.width>0&&drawing_box1.width>0) { Leye=inimg(drawing_box0); Reye=inimg(drawing_box1); L2eye=inimg(drawing_box0); R2eye=inimg(drawing_box1); } } void ImgProcess::EyeDetect()//检测眼睛,调用检测函数 { detectAndDisplay( inimg, drawing_box0,drawing_box1 );//0左眼,1右眼 outimg=inimg; } /////////////////////////////////////////////检测眼睛的边缘 Mat ImgProcess::LEdgeDetect(Mat &edgeimg)//边缘检测 { Mat edgeout; cvtColor(edgeimg,edgeimg,CV_BGR2GRAY);//图像灰度化 GaussianBlur( edgeimg,edgeimg, Size(9, 9), 2, 2 );//Size(9,9),2,2,高斯平滑,减小噪声误差 /////////////////////////将图像进行二值化处理 //threshold(edgeimg,edgeimg,75,255,CV_THRESH_BINARY); ///////////////////////// equalizeHist( edgeimg, edgeimg );//直方图均衡化,为了增加图像的对比度 Canny(edgeimg,edgeout,100,150,3);//原来是50,150,3 return edgeout; } Mat ImgProcess::REdgeDetect(Mat &edgeimg)//边缘检测 { Mat edgeout; cvtColor(edgeimg,edgeimg,CV_BGR2GRAY);//图像灰度化 GaussianBlur( edgeimg,edgeimg, Size(9, 9), 2, 2 );//Size(9,9),2,2,高斯平滑,减小噪声误差 /////////////////////////将图像进行二值化处理 //threshold(edgeimg,edgeimg,50,255,CV_THRESH_BINARY);//50好些 ///////////////////////// equalizeHist( edgeimg, edgeimg );//直方图均衡化,为了增加图像的对比度 Canny(edgeimg,edgeout,50,150,3);//原来是50,150,3 return edgeout; } Mat ImgProcess::L2EdgeDetect(Mat &edgeimg)//边缘检测, 进行二值化处理 { Mat edgeout; cvtColor(edgeimg,edgeimg,CV_BGR2GRAY);//图像灰度化 GaussianBlur( edgeimg,edgeimg, Size(9, 9), 2, 2 );//Size(9,9),2,2,高斯平滑,减小噪声误差 /////////////////////////将图像进行二值化处理 //threshold(edgeimg,edgeimg,85,255,CV_THRESH_BINARY); ///////////////////////// equalizeHist( edgeimg, edgeimg );//直方图均衡化,为了增加图像的对比度 threshold(edgeimg,edgeimg,Lthreshold,255,CV_THRESH_BINARY); Canny(edgeimg,edgeout,50,150,3);//原来是50,150,3 return edgeout; } Mat ImgProcess::R2EdgeDetect(Mat &edgeimg)//边缘检测,进行二值化处理 { Mat edgeout; cvtColor(edgeimg,edgeimg,CV_BGR2GRAY);//图像灰度化 GaussianBlur( edgeimg,edgeimg, Size(9, 9), 2, 2 );//Size(9,9),2,2,高斯平滑,减小噪声误差 /////////////////////////将图像进行二值化处理 //threshold(edgeimg,edgeimg,50,255,CV_THRESH_BINARY);//50好些 ///////////////////////// equalizeHist( edgeimg, edgeimg );//直方图均衡化,为了增加图像的对比度 threshold(edgeimg,edgeimg,Rthreshold,255,CV_THRESH_BINARY);//50好些 Canny(edgeimg,edgeout,50,150,3);//原来是50,150,3 return edgeout; } void ImgProcess::EyeEdge()//检测眼睛的边缘 { Leye_G=LEdgeDetect(Leye); Reye_G=REdgeDetect(Reye); L2eye_G=L2EdgeDetect(L2eye); R2eye_G=R2EdgeDetect(R2eye); } ////////////////////////////////////////////// vector<Vec3f> ImgProcess::LHough(Mat &midImage)//利用Hough变换画圆 { vector<Vec3f> circles; //霍夫变换的第五个参数是不同圆之间的最小距离。 //当设置最小的圆的半径是drawing_box.height/5时,左眼瞳孔定位较好;/8也较好 HoughCircles( midImage, circles, CV_HOUGH_GRADIENT,1.5, 50, 100,20, 6,12 );//1.5,5,100,20,drawing_box.height/6, drawing_box.height/4 return circles; } vector<Vec3f> ImgProcess::RHough(Mat &midImage)//利用Hough变换画圆 { vector<Vec3f> circles; //霍夫变换的第五个参数是不同圆之间的最小距离。 HoughCircles( midImage, circles, CV_HOUGH_GRADIENT,1.5, 50, 100,20, 7,12 );//1.5,5,100,20,drawing_box.height/6, drawing_box.height/4 return circles; } /////////////////////////////////////////////// Mat ImgProcess::PlotC(vector<Vec3f> circles,Mat &midImage)//求圆心 { for( size_t i = 0; i < circles.size(); i++ ) { Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); int radius = cvRound(circles[i][2]); circle( midImage, center, 1, Scalar(255,0,0), -1,8); circle( midImage, center, radius, Scalar(255,0,0), 1,8 ); } return midImage; } void ImgProcess::FindCenter() { //Lcircles=LHough(Leye_G); //Rcircles=RHough(Reye_G); L2circles=LHough(L2eye_G); R2circles=RHough(R2eye_G); //Leye=PlotC(Lcircles,Leye); //Reye=PlotC(Rcircles,Reye); L2eye=PlotC(L2circles,L2eye); R2eye=PlotC(R2circles,R2eye); } /////////////////////////////////////////显示眼睛 Mat ImgProcess::OutLeye() { return Leye; } Mat ImgProcess::OutReye() { return Reye; } Mat ImgProcess::OutL2eye() { return L2eye; } Mat ImgProcess::OutR2eye() { return R2eye; } Mat ImgProcess::Outputimg() { return outimg; } ////////////////////////////////////////// void Widget::on_pushButton_clicked()//打开摄像头 { VideoCapture cap(0); if(!cap.isOpened()) { cout<<"no cap"<<endl; } Mat frame; while(!Lstop) { cap>>frame;//将摄像头的当前帧输出到frame ImgProcess pro(frame);//建立视频处理类 pro.EyeDetect();//人眼检测 Mat image=pro.Outputimg();//输出检测图像
评论
    相关推荐
    • zcx.rar
      对玻璃瓶的彩色图像进行处理,二值化,滤波,增强,阈值分割,边缘检测,Hough圆检测
    • lubiaoshibie.rar
      路标识别,模式识别大作业,主程序;检测彩色路标,直方图均衡化,提取圆形路标,增强提取目标,二值化,提取路标中的指示图,中值滤波,平滑滤波,图像边框处理,链码生成及识别
    • skin_modle.zip
      实现基于肤色模板的人脸区域检测检测不分人种,程序代码有注释,适合初学者
    • yb fenlei.zip
      实现硬币检测与分类,并圈出对应硬币,例如一元五角等
    • matlab代码黄色-Fruit-Recognition:数字图像处理
      根据水果和背景的差别选取阈值,对去噪增强对比度后的图像进行二值化处理。再对图像进行边缘检测,选定连通区域,标记后再对不同种水果的颜色,形状,大小等特征进行快速识别水果,从而实现对水果的正确分拣。 ...
    • 基于MATLAB的钢板表面缺陷检测系统设.zip
      基于MATLAB的钢板表面缺陷检测系统设
    • Sumopaint - Online Image Editor-crx插件
      语言:English 最受欢迎的照片编辑器和绘画...-套索-矩形套索-魔术棒-矩形和椭圆形选择-边框,羽毛,展开和收缩选择图像增强工具包括:-锐化蒙版-曲线-色阶-亮度/对比度-色相/饱和度-色差 喷枪-色温多种图像变换类型:-
    • 基于matlab的刀具切削刃钝半径检测
      本设计基于matlab对于工件的尖锐处进行钝圆检测,该文档包括对两个工厂常用的铣刀工件的钝圆检测,即三角形铣刀测量和树形工件钝圆测量,该文档包括图像处理的基本步骤,图像二值化,图像加噪滤波,图像边缘检测,...
    • 交通标志牌检测 限速标志 matlab
      能够识别出不同场景环境下图片中的交通限速标志,将限速标志及其里面的数字分别标志出来,具有较强的鲁棒性。
    • codesforimageprocessing.rar
      实现简单图像处理,包括256色转灰度图、Hough变换、Walsh变换、中值滤波、二值化变换、亮度增减、傅立叶变换、反色、取对数、取指数、图像平移、图像旋转、图像细化、图像缩放、图像镜像、均值滤波、对比度拉伸、拉普拉斯锐化(边缘检测)、方块编码、梯度锐化、灰度均衡、直方图均衡、离散余弦变换、维纳滤波处理、逆滤波处理、阈值变换、高斯平滑。