zoukankan      html  css  js  c++  java
  • 人脸识别

    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. }
  • 相关阅读:
    BFS visit tree
    Kth Largest Element in an Array 解答
    Merge k Sorted Lists 解答
    Median of Two Sorted Arrays 解答
    Maximal Square 解答
    Best Time to Buy and Sell Stock III 解答
    Best Time to Buy and Sell Stock II 解答
    Best Time to Buy and Sell Stock 解答
    Triangle 解答
    Unique Binary Search Trees II 解答
  • 原文地址:https://www.cnblogs.com/JeffreyCheung/p/5841076.html
Copyright © 2011-2022 走看看