国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

QT連接OpenCV庫實現(xiàn)人臉識別

這篇具有很好參考價值的文章主要介紹了QT連接OpenCV庫實現(xiàn)人臉識別。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、關(guān)于圖像處理的相關(guān)類和函數(shù)

圖像容器:Mat類

讀取圖像:

Mat imread( const String& filename, int flags = IMREAD_COLOR );
功能:讀取出圖像
參數(shù):圖像路徑
返回值:讀取的圖像

?命名展示圖像的窗口:

void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
功能:命名一個圖像窗口
參數(shù)1:窗口名稱
參數(shù)2:窗體尺寸,默認(rèn)為自適應(yīng)大小
返回值:無

展示圖像:

void imshow(const String& winname, const ogl::Texture2D& tex);
功能:展示圖像
參數(shù)1:要展示圖像的窗口名稱
參數(shù)2:要展示的二維圖像
返回值:無

示例:

#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    //1、定義一個圖像容器
    Mat src;

    //2、將圖像加載進(jìn)來
    //函數(shù)原型:Mat imread( const String& filename, int flags = IMREAD_COLOR );
    //參數(shù):圖像的路徑
    //返回值:圖像容器
    src = imread("D:/opencv/resource/age.jpg");

    //4、命名一個展示圖像的窗口
    //namedWindow("Test");

    //5、展示圖像
    //函數(shù)原型:void imshow(const String& winname, const ogl::Texture2D& tex);
    //參數(shù)1:要展示圖像的窗口名稱
    //參數(shù)2:要展示的圖像
    //返回值:無
    imshow("Test", src);
    return a.exec();
}

二、視頻流相關(guān)類和函數(shù)

視頻流類:VideoCapture

打開視頻:

virtual bool open(const String& filename);
參數(shù):要打開視頻的路徑
返回值:成功返回true失敗返回false

若想要打開攝像頭只需在構(gòu)造時,調(diào)用構(gòu)造函數(shù)參數(shù)傳遞0即可

讀取視頻流中圖像:

virtual bool read(OutputArray image);
功能:讀取視頻流中的圖像
參數(shù):圖像容器
返回值:成功讀取返回true,失敗或者視頻結(jié)束返回false

?圖像翻轉(zhuǎn):

void flip(InputArray src, OutputArray dst, int flipCode);
將圖像進(jìn)行旋轉(zhuǎn)
參數(shù)1:要處理的圖像
參數(shù)2:處理后的圖像容器
參數(shù)3:處理規(guī)則:0:表示沿x翻轉(zhuǎn),1表示沿y軸翻轉(zhuǎn),-1表示沿xy軸翻轉(zhuǎn)

休眠阻塞函數(shù):

int waitKey(int delay = 0);
功能:阻塞等待用戶輸入數(shù)據(jù),如果delay=0,則一直等待
參數(shù):毫秒數(shù)
返回值:在等待過程中用戶按下鍵的值

示例:

#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    //1、定義視頻流對象
    VideoCapture v(0);             //表明使用攝像頭構(gòu)造一個視頻流對象

    //2、讀取攝像頭中的圖像
    Mat src;                   //用于存放讀取出來的圖像

    //函數(shù)原型:virtual bool read(OutputArray image);
    //功能:從視頻流中讀取一張圖像放入?yún)?shù)中
    //參數(shù):圖像容器
    //返回值:成功返回真,失敗或者讀取視頻結(jié)束返回假
    while(v.read(src))
    {
        //將圖像進(jìn)行翻轉(zhuǎn)
        //函數(shù)原型:void flip(InputArray src, OutputArray dst, int flipCode);
        //參數(shù)1:要翻轉(zhuǎn)的圖像
        //參數(shù)2:翻轉(zhuǎn)后的圖像容器
        //參數(shù)3:翻轉(zhuǎn)規(guī)則:正數(shù)表示按y軸翻轉(zhuǎn),0表示按x軸翻轉(zhuǎn),負(fù)數(shù)表示按xy軸翻轉(zhuǎn)
        flip(src, src, 1);

        //展示圖像
        imshow("Test1", src);

        //加延時函數(shù)
        //函數(shù)原型:int waitKey(int delay = 0);
        //參數(shù):等待時間
        //返回值:在等待期間用戶按下的鍵盤的ascii值    ESC鍵對應(yīng)的值為27
        if(waitKey(20)==27)
        {
            break;
        }
    }
    return a.exec();
}

三、圖像處理

灰度處理:

void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
功能:轉(zhuǎn)換圖像色彩空間
參數(shù)1:要轉(zhuǎn)換的圖像
參數(shù)2:轉(zhuǎn)變后圖像容器
參數(shù)3:轉(zhuǎn)換規(guī)則:BGR to gray
返回值:無

均衡化處理:

void equalizeHist( InputArray src, OutputArray dst ); 
參數(shù)1:輸入的灰度圖像,必須是8-bit的單通道圖像  
參數(shù)2:輸出的圖像 
圖像直方圖:對整個圖像在灰度范圍內(nèi)的像素值(0-255)統(tǒng)計出現(xiàn)的頻率,據(jù)此生成直方圖,直方圖反應(yīng)了圖像的灰度分布情況。

示例:

#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    //1、定義視頻流對象
    VideoCapture v(0);             //表明使用攝像頭構(gòu)造一個視頻流對象

    //2、讀取攝像頭中的圖像
    Mat src;                   //用于存放讀取出來的圖像
    Mat gray;                   //用于存儲灰度圖的圖像容器
    Mat dst;                     //用于存儲均衡化處理后的圖像容器

    //函數(shù)原型:virtual bool read(OutputArray image);
    //功能:從視頻流中讀取一張圖像放入?yún)?shù)中
    //參數(shù):圖像容器
    //返回值:成功返回真,失敗或者讀取視頻結(jié)束返回假
    while(v.read(src))
    {
        //將圖像進(jìn)行翻轉(zhuǎn)
        //函數(shù)原型:void flip(InputArray src, OutputArray dst, int flipCode);
        //參數(shù)1:要翻轉(zhuǎn)的圖像
        //參數(shù)2:翻轉(zhuǎn)后的圖像容器
        //參數(shù)3:翻轉(zhuǎn)規(guī)則:正數(shù)表示按y軸翻轉(zhuǎn),0表示按x軸翻轉(zhuǎn),負(fù)數(shù)表示按xy軸翻轉(zhuǎn)
        flip(src, src, 1);

        //3、將圖像灰度處理
        //函數(shù)原型:void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
        //參數(shù)1:要轉(zhuǎn)換的圖像
        //參數(shù)2:轉(zhuǎn)換后的圖像容器
        //參數(shù)3:轉(zhuǎn)換規(guī)則  CV_BGR2GRAY表示將bgr彩色圖轉(zhuǎn)換為gray灰度圖
        //返回值:無
        cvtColor(src, gray, CV_BGR2GRAY);

        //4、對圖像進(jìn)行均衡化處理
        //函數(shù)原型:void equalizeHist( InputArray src, OutputArray dst );
        //參數(shù)1:要進(jìn)行均衡化處理的圖像,必須是單通道灰度圖
        //參數(shù)2:均衡化處理后的圖像容器
        //返回值:無
        equalizeHist(gray, dst);

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

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

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

        //加延時函數(shù)
        //函數(shù)原型:int waitKey(int delay = 0);
        //參數(shù):等待時間
        //返回值:在等待期間用戶按下的鍵盤的ascii值    ESC鍵對應(yīng)的值為27
        if(waitKey(20)==27)
        {
            break;
        }
    }
    return a.exec();
}

四、級聯(lián)分類器

opencv級聯(lián)分類器工具類 : CascadeClassifier

加載級聯(lián)分類器配置文件 :

bool load( const String& filename ) 
參數(shù)1:分類器數(shù)據(jù)文件的名字
返回值:成功true,失敗false

找到人臉?biāo)谖恢玫木匦螀^(qū)域:

void detectMultiScale(
const Mat& image, 
CV_OUT vector& objects,
double scaleFactor = 1.1,
int minNeighbors = 3, 
int flags = 0, 
Size ize = Size(24,24))
參數(shù)1:待檢測灰度圖像(數(shù)據(jù)少處理起來簡單) 
參數(shù)2:被檢測物體的矩形框向量( 人臉Rect矩形區(qū)域,其中objects.size()是人臉個數(shù) ) 
參數(shù)3:前后兩次相繼的掃描中搜索窗口的比例系數(shù),默認(rèn)為1.1 即每次搜索窗口擴大10% 
參數(shù)4:構(gòu)成檢測目標(biāo)的相鄰矩形的最小個數(shù) 如果組成檢測目標(biāo)的小矩形的個數(shù)和小于 minneighbors - 1 都會被除 
參數(shù)5:若設(shè)置為CV_HAAR_DO_CANNY_PRUNING 函數(shù)將會使用Canny邊緣檢測來排除邊緣過多 或過少的區(qū)域,,一般采用默認(rèn)值0 
參數(shù)6:用來限制得到的目標(biāo)區(qū)域的范圍,一般檢測人臉使用Size(24, 24)

顯示矩形區(qū)域:

void rectangle(
CV_IN_OUT Mat& img, 
Rect rec,
const Scalar& color, 
int thickness = 1,
int lineType = LINE_8, 
int shift = 0);

img:圖像。 
rec:表征矩形的位置和長寬。 
color:線條顏色 (RGB) 。 
thickness:組成矩形的線條的粗細(xì)程度。 
line_type:線條的類型。 
shift:坐標(biāo)點的小數(shù)點位數(shù),0表示沒有小數(shù)點。

示例:

?文章來源地址http://www.zghlxwxcb.cn/news/detail-696493.html

#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    //1、定義視頻流對象
    VideoCapture v(0);             //表明使用攝像頭構(gòu)造一個視頻流對象

    //2、讀取攝像頭中的圖像
    Mat src;                   //用于存放讀取出來的圖像
    Mat gray;                   //用于存儲灰度圖的圖像容器
    Mat dst;                     //用于存儲均衡化處理后的圖像容器

    //5、實例化一個級聯(lián)分類器的對象,用于找到圖像中的人臉矩形區(qū)域
    CascadeClassifier c;
    //給類對象裝載人臉識別模型
    //函數(shù)原型:bool load( const String& filename );
    //功能:給級聯(lián)分類器對象,下載一個識別模型
    //參數(shù):人臉識別模型的文件路徑
    //返回值:成功下載返回真,失敗返回假
    if(!c.load("D:/opencv/resource/haarcascade_frontalface_alt2.xml"))
    {
        QMessageBox::information(NULL,"失敗", "人臉識別模型裝載失敗");
        return -1;
    }

    //定義容器存放人臉分類后的矩形框
    vector<Rect> faces;

    //函數(shù)原型:virtual bool read(OutputArray image);
    //功能:從視頻流中讀取一張圖像放入?yún)?shù)中
    //參數(shù):圖像容器
    //返回值:成功返回真,失敗或者讀取視頻結(jié)束返回假
    while(v.read(src))
    {
        //將圖像進(jìn)行翻轉(zhuǎn)
        //函數(shù)原型:void flip(InputArray src, OutputArray dst, int flipCode);
        //參數(shù)1:要翻轉(zhuǎn)的圖像
        //參數(shù)2:翻轉(zhuǎn)后的圖像容器
        //參數(shù)3:翻轉(zhuǎn)規(guī)則:正數(shù)表示按y軸翻轉(zhuǎn),0表示按x軸翻轉(zhuǎn),負(fù)數(shù)表示按xy軸翻轉(zhuǎn)
        flip(src, src, 1);


        //3、將圖像灰度處理
        //函數(shù)原型:void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
        //參數(shù)1:要轉(zhuǎn)換的圖像
        //參數(shù)2:轉(zhuǎn)換后的圖像容器
        //參數(shù)3:轉(zhuǎn)換規(guī)則  CV_BGR2GRAY表示將bgr彩色圖轉(zhuǎn)換為gray灰度圖
        //返回值:無
        cvtColor(src, gray, CV_BGR2GRAY);


        //4、對圖像進(jìn)行均衡化處理
        //函數(shù)原型:void equalizeHist( InputArray src, OutputArray dst );
        //參數(shù)1:要進(jìn)行均衡化處理的圖像,必須是單通道灰度圖
        //參數(shù)2:均衡化處理后的圖像容器
        //返回值:無
        equalizeHist(gray, dst);


        //6、使用級聯(lián)分類器對象,獲取人臉矩形區(qū)域
        //函數(shù)原型:void detectMultiScale( InputArray image,CV_OUT std::vector<Rect>& objects)
        //參數(shù)1:要進(jìn)行識別的圖像
        //參數(shù)2:對該圖像識別后,的矩形框存放的數(shù)組容器
        c.detectMultiScale(dst, faces);


        //7、將上述得到的矩形框,全部都繪制到圖像上
        for(int i=0; i<faces.size(); i++)
        {
            //將任意一個矩形框,全部都繪制到圖像上
            //函數(shù)原型:void rectangle(CV_IN_OUT Mat& img, Rect rec,const Scalar& color, int thickness = 1)
            //參數(shù)1:要被繪制的圖像
            //參數(shù)2:要繪制的矩形框
            //參數(shù)3:矩形框的顏色
            //參數(shù)4:矩形框的粗細(xì)
            //返回值:無
            rectangle(src, faces[i], Scalar(0,0,255), 2);
        }


        //8、像素反差
        for(int i=0; i<src.rows; i++)        //外層循環(huán)控制行數(shù)
        {
            for(int j=0; j<src.cols; j++)        //內(nèi)層循環(huán)控制列數(shù)
            {
                //找到任意一個像素: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];  //對像素進(jìn)行反差
                }


            }
        }

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

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

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


        //加延時函數(shù)
        //函數(shù)原型:int waitKey(int delay = 0);
        //參數(shù):等待時間
        //返回值:在等待期間用戶按下的鍵盤的ascii值    ESC鍵對應(yīng)的值為27
        if(waitKey(20)==27)
        {
            break;
        }
    }

    return a.exec();
}

到了這里,關(guān)于QT連接OpenCV庫實現(xiàn)人臉識別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Qt-OpenCV學(xué)習(xí)筆記--人臉識別

    Qt-OpenCV學(xué)習(xí)筆記--人臉識別

    本人從事機械設(shè)計12年,業(yè)余時間自學(xué)編程。 2022年4月6日,開始學(xué)習(xí)C#, 2022年9月7日,開始學(xué)習(xí)c++和Qt, 2022年10月28日,開始學(xué)習(xí)OpenCV, 今天終于搞定了傳說中的 人臉識別 ?,在此,做個記錄。 人臉檢測,是基于Haar特征的cascade分類器, 人臉識別,是基于LDA理論的Fisherface算

    2024年02月09日
    瀏覽(20)
  • Linux畢業(yè)設(shè)計:基于OpenCV和QT庫實現(xiàn)的人臉識別考勤/門禁系統(tǒng)(arm嵌入式ubuntu)

    Linux畢業(yè)設(shè)計:基于OpenCV和QT庫實現(xiàn)的人臉識別考勤/門禁系統(tǒng)(arm嵌入式ubuntu)

    ????????本文介紹:Linux上以opencv和qt庫實現(xiàn)的人臉識別系統(tǒng),可應(yīng)用于考勤、門禁等場景,具有人臉錄入、刪除、人臉檢測、識別、用戶管理等完整功能??蛇\行于ARM嵌入式linux、ubuntu即純軟件、ARM+PC組合等多種方式,應(yīng)用場景多樣且易于移植各個平臺。 畢業(yè)設(shè)計題目匯

    2024年02月04日
    瀏覽(28)
  • OpenCV+ Qt Designer 開發(fā)人臉識別考勤系統(tǒng)

    OpenCV+ Qt Designer 開發(fā)人臉識別考勤系統(tǒng)

    本系統(tǒng)是一個基于OpenCV和 Qt Designer 的人臉識別考勤系統(tǒng),主要功能是自動識別攝像頭中的人臉,并把人臉對應(yīng)的姓名和打卡時間存儲到數(shù)據(jù)庫中,方便管理人員進(jìn)行考勤管理。本系統(tǒng)使用 face_recognition 庫進(jìn)行人臉識別,使用 PyQt5 開發(fā)界面,然后把界面與代碼進(jìn)行整合。 系統(tǒng)

    2024年02月06日
    瀏覽(23)
  • opencv系列(1)--使用opencv和Qt6做一個視頻監(jiān)控器人臉識別

    這個程序是自己的下班之后,看看那個壞東西想來偷看我的電腦。我就隨手做的一個程序。 1.能都顯示攝像頭的內(nèi)容。 2.如果有人進(jìn)入攝像頭。 3.利用opencv的模型識別人臉,識別到了就保存到自己的電腦里面。 4.并把他的照片顯示到界面上一段時間,告訴他,偷窺有罪。 5.程

    2024年02月11日
    瀏覽(22)
  • 基于Springboot+百度AI人工智能人臉識別考勤系統(tǒng)設(shè)計與實現(xiàn)

    基于Springboot+百度AI人工智能人臉識別考勤系統(tǒng)設(shè)計與實現(xiàn)

    基于Springboot+百度AI人工智能人臉識別考勤系統(tǒng)設(shè)計與實現(xiàn) ?博主介紹: 《Vue.js入門與商城開發(fā)實戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計教育和輔導(dǎo)。 所有項目都配有從入門到精通的基礎(chǔ)知識視頻課程,免費

    2024年02月05日
    瀏覽(99)
  • 基于OpenCV提供的人臉識別算法LBPH實現(xiàn)人臉識別

    基于OpenCV提供的人臉識別算法LBPH實現(xiàn)人臉識別

    本文通過學(xué)習(xí)LBPH人臉識別算法,簡要了解人臉識別技術(shù)的原理,實現(xiàn)人臉采集、訓(xùn)練人臉模型實現(xiàn)人臉識別。 OpenCV庫自帶的人臉級聯(lián)分級器具有很好的人臉檢測和人臉追蹤效果,它是一個基于Haar特征的Adaboost級聯(lián)分類器。特別注意,OpenCV庫雖然自帶人臉級聯(lián)分級器,但是識

    2024年02月03日
    瀏覽(21)
  • Java使用opencv實現(xiàn)人臉識別、人臉比對

    Java使用opencv實現(xiàn)人臉識別、人臉比對

    1. opencv概述 OpenCV是一個開源的計算機視覺庫,它提供了一系列豐富的圖像處理和計算機視覺算法,包括圖像讀取、顯示、濾波、特征檢測、目標(biāo)跟蹤等功能。 opencv官網(wǎng):https://opencv.org/ opencv官網(wǎng)文檔:https://docs.opencv.org/4.7.0/index.html 參考教程1:https://www.w3cschool.cn/opencv/ 參考教

    2024年02月08日
    瀏覽(20)
  • opencv實現(xiàn)人臉識別(c++實現(xiàn))

    opencv實現(xiàn)人臉識別(c++實現(xiàn))

    本文章基于opencv + VS2015 實現(xiàn)人臉檢測 可以直接打開攝像頭對人臉進(jìn)行識別,這些標(biāo)識框也會跟隨你的人臉移動。隱私問題,我這里對圖片進(jìn)行了識別。 opencv中文文檔 官方文檔說明 功能 :用于從視頻文件、圖像序列或攝像機捕獲視頻的類 3.1.1 open bool cv::VideoCapture::open(int i

    2024年02月07日
    瀏覽(18)
  • 使用opencv實現(xiàn)簡單的人臉識別

    使用opencv實現(xiàn)簡單的人臉識別

    opencv-python是一個python綁定庫,旨在解決計算機視覺問題。使用opencv模塊,可以實現(xiàn)一些對圖片和視頻的操作。 安裝opencv之前需要先安裝numpy,?matplotlib。然后使用pip安裝opencv庫即可。 使用import cv2進(jìn)行導(dǎo)入即可,需要注意的是cv2讀取圖片的顏色通道是BGR(藍(lán)綠紅)。 使用cv2.

    2023年04月19日
    瀏覽(21)
  • 基于MFC和OpenCV實現(xiàn)人臉識別

    基于MFC和OpenCV實現(xiàn)人臉識別

    筆記主要參考B站視頻“【C語言項目】軟件開發(fā):人臉識別”。 項目原理速覽查看B站視頻“【學(xué)習(xí)筆記】基于OpenCV實現(xiàn)人臉識別的原理講解”。 可能會用到的資料有如下所示,下載鏈接見文末: 《奇牛編程-人臉識別資料》 1 ,但是其中有一些命名錯誤可能會導(dǎo)致程序調(diào)用失

    2024年02月07日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包