首页 > 其他分享 >QT连接OpenCV库实现人脸识别

QT连接OpenCV库实现人脸识别

时间:2023-10-18 21:25:04浏览次数:38  
标签:src 人脸识别 QT int dst OpenCV 参数 图像

QT连接OpenCV库实现人脸识别_opencv qt 人脸识别-CSDN博客

 

#include "mainwindow.h"
#include <QApplication>
#include <opencv2/opencv.hpp>
#include <QMessageBox>

using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    //1、定义视频流对象
    VideoCapture v(0);             //表明使用摄像头构造一个视频流对象

    //2、读取摄像头中的图像
    Mat src;                   //用于存放读取出来的图像
    Mat gray;                   //用于存储灰度图的图像容器
    Mat dst;                     //用于存储均衡化处理后的图像容器

    //5、实例化一个级联分类器的对象,用于找到图像中的人脸矩形区域
    CascadeClassifier c;
    //给类对象装载人脸识别模型
    //函数原型:bool load( const String& filename );
    //功能:给级联分类器对象,下载一个识别模型
    //参数:人脸识别模型的文件路径
    //返回值:成功下载返回真,失败返回假
    if(!c.load("E:/opencv3.4.0/OpenCV-MinGW-Build-OpenCV-3.4.5/etc/haarcascades/haarcascade_frontalface_alt2.xml"))
    {
        QMessageBox::information(NULL,"失败", "人脸识别模型装载失败");
        return -1;
    }

    //定义容器存放人脸分类后的矩形框
    vector<Rect> faces;

    //函数原型:virtual bool read(OutputArray image);
    //功能:从视频流中读取一张图像放入参数中
    //参数:图像容器
    //返回值:成功返回真,失败或者读取视频结束返回假
    while(v.read(src))
    {
        //将图像进行翻转
        //函数原型:void flip(InputArray src, OutputArray dst, int flipCode);
        //参数1:要翻转的图像
        //参数2:翻转后的图像容器
        //参数3:翻转规则:正数表示按y轴翻转,0表示按x轴翻转,负数表示按xy轴翻转
        flip(src, src, 1);


        //3、将图像灰度处理
        //函数原型:void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
        //参数1:要转换的图像
        //参数2:转换后的图像容器
        //参数3:转换规则  CV_BGR2GRAY表示将bgr彩色图转换为gray灰度图
        //返回值:无
        cvtColor(src, gray, CV_BGR2GRAY);


        //4、对图像进行均衡化处理
        //函数原型:void equalizeHist( InputArray src, OutputArray dst );
        //参数1:要进行均衡化处理的图像,必须是单通道灰度图
        //参数2:均衡化处理后的图像容器
        //返回值:无
        equalizeHist(gray, dst);


        //6、使用级联分类器对象,获取人脸矩形区域
        //函数原型:void detectMultiScale( InputArray image,CV_OUT std::vector<Rect>& objects)
        //参数1:要进行识别的图像
        //参数2:对该图像识别后,的矩形框存放的数组容器
        c.detectMultiScale(dst, faces);


        //7、将上述得到的矩形框,全部都绘制到图像上
        for(int i=0; i<faces.size(); i++)
        {
            //将任意一个矩形框,全部都绘制到图像上
            //函数原型:void rectangle(CV_IN_OUT Mat& img, Rect rec,const Scalar& color, int thickness = 1)
            //参数1:要被绘制的图像
            //参数2:要绘制的矩形框
            //参数3:矩形框的颜色
            //参数4:矩形框的粗细
            //返回值:无
            rectangle(src, faces[i], Scalar(0,0,255), 2);
        }


        //8、像素反差
        for(int i=0; i<src.rows; i++)        //外层循环控制行数
        {
            for(int j=0; j<src.cols; j++)        //内层循环控制列数
            {
                //找到任意一个像素:src.at<Vec3b>(i,j)
                //找到任意一个像素中的通道中的值src.at<Vec3b>(i,j)[k]
                for(int k=0; k<3; k++)
                {
                    src.at<Vec3b>(i,j)[k] = 255 - src.at<Vec3b>(i,j)[k];  //对像素进行反差
                }


            }
        }

        //展示彩色图像
        imshow("Test1", src);

        //展示灰度图像
        imshow("Test2", gray);

        //展示均衡化处理后的图像
        imshow("Test3", dst);


        //加延时函数
        //函数原型:int waitKey(int delay = 0);
        //参数:等待时间
        //返回值:在等待期间用户按下的键盘的ascii值    ESC键对应的值为27
        if(waitKey(20)==27)
        {
            break;
        }
    }

    return a.exec();
}

标签:src,人脸识别,QT,int,dst,OpenCV,参数,图像
From: https://www.cnblogs.com/dq0618/p/17773350.html

相关文章

  • Qt 表格设置表格单元的输入正则表达式
    //用于给表格设置正则表达式,//table视图QTableView//table模型QStandardItemModel//使用示例://wangchuan::RegExp::InputDelegate*inputDelegate=newwangchuan::RegExp::InputDelegate;//m_tableview......
  • 基于opencv 水果秤的设计与实现--文档
    1.选题意义1.1理论意义智慧农业已成为当今现代农业发展的大趋势,而水果图像的识别在智慧农业领域具有重要的地位。传统的水果秤需要通过人工辨别水果的种类,然后选择对应的价格进行计价操作。在该方式下,由于人的分辨能力以及记忆有限,所以计价环节容易出错,特别是在大型超市中,会带来不......
  • centos 6.10 安装 qtCreator6.0.2
    centos6.10安装qtCreator6.0.2在centos6.10上源码编译安装qtCreator6.0.2下载地址下载后解压然后执行下面命令cdqt-creator-opensource-src-6.0.2mkdirbuild&&cdbuildcmake..make......
  • Qt 读写文件操作
    一、Qt中的读文本的内容1.以QTextStream流的形式来读取文件中的内容。#include<QFile>#include<QTextStream>#include<QDebug>voidReadData(QStringfilePath){QFilefile(filePath);if(!file.exists()){qDebug()<<"can'......
  • QT 禁止QLineEdit输入空格、空值
    QRegExprx("[^\\s]+$");QRegExpValidator*validator=newQRegExpValidator(rx,this);ui->lineedit->setValidator(validator);正则表达式参考链接:https://blog.csdn.net/Hyc_cheng/article/details/112132963......
  • Qt 文件目录操作 QDir、QFile、QTemporaryDir/File、QTextStream、QDataStream、QSett
    摘要:  这一篇Qt博文主要介绍在Qt开发中对于文件目录操作相关处理的时候可以用到哪些类,这些类的作用是什么,大致应该怎么用,类的常用类方法及相关需要注意的事项等等,更加细致的需根据类名查找翻阅官方帮助文档。  QT提供的与文件和目录操作相关的类有以下几个:QDir:类提供对......
  • arm平台上安装qt
    如下图步骤选择源代码包(以5.12.12为例)可以复制链接地址在迅雷上创建下载任务,下载速度会快些qt的编译与安装需要先安装gcc与cmake解压安装包将文件放置到文件夹下,解压(例如解压到/usr/local/qt)tarxvfqt-everywhere-src-5.12.12.tar.xz-C/usr/local/qt/解压安装包Qt依赖于一......
  • Qt/C/C++ 项目工程架构搭建设计经验
    摘要  独立负责一个Qt项目和经过前辈的教导后的一些架构搭建感悟,其中的各种理念对其他语言开发的项目也能有一定的互通,能带来更舒适的开发体验,谨代表个人开发的经验之谈,有需要的小伙伴酌情获取,辩证思考。也欢迎小伙伴们在评论区纠错补充。  关键词:C/C++、Qt、搭建框架、更......
  • centOs 6.10 编译 qt 5.15.11.
    centOs6.10编译qt5.15.11安装依赖库xcb依赖库qtxcb需要的依赖如何要用x11,就要在编译的时候加上-xcb选项,就要安装xcb相关的库。到时可以在config.log文件查看,缺少哪个库就安装哪个。下面是我手动安装的库和对应版本:xcb-proto-1.14.tar.gzxcb-util-image-0.......
  • 基于 AdaFace 提供适合低质量人脸识别的人脸特征向量输出服务
    写在前面工作原因,简单整理理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧——赫尔曼·黑塞《德米安》简单介绍通过AdaFace提......