• 人脸识别


    linux下使用Qt实现文件遍历及查找

    本函数通过遍历指定目录寻找图片文件,然后搜索出含有人脸的图片,代码如下:

    1. //遍历目录查找
    2. void FaceDetector::detectRun(const QString &path){
    3.     //判断当前线程是否正在运行
    4.     if(!isGoing)
    5.         return;
    6.     QDir dir(path);
    7.     //若目录不存在则返回退出
    8.     if (!dir.exists())
    9.         return;
    10.     //设置过滤器(目录,文件或非上级目录)
    11.     dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot);
    12.     dir.setSorting(QDir::DirsFirst);
    13.     //取得目录中文件列表(包含目录)
    14.     QFileInfoList list = dir.entryInfoList();
    15.     int i=0;
    16.     do{
    17.         QFileInfo fileInfo = list.at(i);
    18.         //通知View层更新当前检索到的文件
    19.         emit detectChanged(0,trUtf8("当前文件:")+fileInfo.absoluteFilePath());
    20.         bool bisDir=fileInfo.isDir();
    21.         //判断是否为目录,如果是目录则遍历,否则当前处理文件
    22.         if(bisDir)
    23.         {
    24.             detectRun(fileInfo.filePath());
    25.         }
    26.         else{
    27.             //取得文件类型后缀
    28.             QString temp=fileInfo.suffix().toLower();
    29.             //如果是图片类型则进行处理
    30.             if(conf->imageTypeList.contains(temp)){
    31.                 //将文件名QString类型改为std::string类型
    32.                 string filename(qPrintable(fileInfo.absoluteFilePath()));
    33.                 //本函数用来搜索含有人脸的图片
    34.                 DetectObject* obj=detectImage(filename);
    35.                 //如果检测出人脸区域则通知View层
    36.                 if(obj!=NULL)
    37.                     emit detectChanged(obj,trUtf8("正在处理:")+fileInfo.absoluteFilePath());
    38.             }
    39.         }
    40.         i++;
    41.     }while(i<list.size());
    42.     return;
    43. }
    44. //识别是否包含人脸图片
    45. DetectObject* FaceDetector::detectImage(string &filename){
    46.     if(isGoing){
    47.         //读取图片
    48.         Mat img = imread(filename, 1 );
    49.         if(img.empty())
    50.             return NULL;
    51.         //定义人脸区域列表
    52.         vector<Rect> faces;
    53.         Mat gray, smallImg(img.rows, img.cols, CV_8UC1 );
    54.         //将图像转成灰度图像
    55.         cvtColor( img, gray, CV_BGR2GRAY );
    56.         //调整图像大小
    57.         resize( gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR );
    58.         //直方图均衡处理
    59.         equalizeHist( smallImg, smallImg );
    60.         //检测人脸区域
    61.         cascade.detectMultiScale( smallImg, faces,
    62.                 1.1, 2, 0
    63.                 |CV_HAAR_SCALE_IMAGE,
    64.                 Size(conf->minWidth, conf->minHeight) );
    65.         if(!faces.empty()){
    66.             //将识别出的人脸区域返回
    67.             DetectObject *obj=new DetectObject;
    68.             obj->filename=trUtf8(filename.c_str());
    69.             for( vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++){
    70.                 QRect rect;
    71.                 rect.setX(r->x);
    72.                 rect.setY(r->y);
    73.                 rect.setWidth(r->width);
    74.                 rect.setHeight(r->height);
    75.                 obj->detectRect<<rect;
    76.             }
    77.             gray.release();
    78.             smallImg.release();
    79.             img.release();
    80.             return obj;
    81.         }
    82.         gray.release();
    83.         smallImg.release();
    84.         img.release();
    85.     }
    86.     return NULL;
    87. }
  • 相关阅读:
    验证授权【msdn】
    实战 Comet 应用程序开发
    ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷 [转]
    分享WordPress博客搜索引擎优化的六点经验 博客园 cnbogs
    支持支付宝(Alipay)付款的三个美国主机商
    认证,授权2
    登录代码,程序不是作文
    Google 的PageRank值对网站成功有多重要
    SQL Server 2005 Service Broker 初探 [摘抄]
    jQuerySelectors(选择器)的使用(四五、内容篇&可见性篇) cnblogs zhuan
  • 原文地址:https://www.cnblogs.com/JeffreyCheung/p/5841076.html
Copyright © 2020-2023  润新知