chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux下QT配合OpenCV完成圖像處理(實(shí)現(xiàn)人臉檢測(cè))

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 09:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、環(huán)境介紹

ubuntu版本: VM虛擬機(jī)運(yùn)行ubuntu18.04 64位

OpenCV版本: 3.4.9

QT版本: 5.12

OpenCV 是一個(gè)基于 BSD 許可(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在 Linux、Windows、Android 和 Mac OS 操作系統(tǒng)上。

OpenCV 的全稱是 Open Source Computer Vision Library,是一個(gè)跨平臺(tái)的計(jì)算機(jī)視覺(jué)庫(kù)。OpenCV 是由英特爾公司發(fā)起并參與開(kāi)發(fā),以 BSD 許可證授權(quán)發(fā)行,可以在商業(yè)和研究領(lǐng)域中免費(fèi)使用。OpenCV 可用于開(kāi)發(fā)實(shí)時(shí)的圖像處理、計(jì)算機(jī)視覺(jué)以及模式識(shí)別程序。

OpenCV 用 C++語(yǔ)言編寫(xiě),它具有 C ++,Python,JavaMATLAB 接口,并支持 Windows,Linux,Android 和 Mac OS,OpenCV 主要傾向于實(shí)時(shí)視覺(jué)應(yīng)用,并在可用時(shí)利用 MMX 和 SSE 指令, 如今也提供對(duì)于 C#、Ch、Ruby,GO 的支持。

二、建立QT工程加入OpenCV依賴庫(kù)

下面編寫(xiě)例子很簡(jiǎn)單,使用OpenCV自帶的分類器,檢測(cè)一張圖中的人臉,并圈出來(lái)。

opencv源碼自帶的人臉檢測(cè)分類器目錄:opencv-3.4.9/data/haarcascades_cuda/haarcascade_frontalface_alt2.xml

xxx.pro工程文件代碼:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

#linu平臺(tái)的路徑設(shè)置
linux {
#添加opencv頭文件的路徑,需要根據(jù)自己的頭文件路徑進(jìn)行修改
INCLUDEPATH+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/include\
             /home/wbyq/work_pc/opencv-3.4.9/_install/install/include/opencv\
             /home/wbyq/work_pc/opencv-3.4.9/_install/install/include/opencv2

LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_calib3d.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_core.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_dnn.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_features2d.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_flann.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_highgui.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_imgcodecs.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_imgproc.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_ml.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_objdetect.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_photo.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_shape.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_stitching.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_superres.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_videoio.so
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_video.so
}

widget.cpp文件代碼:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    opencv_face();
}

Widget::~Widget()
{
    delete ui;
}

//分類器的路徑
#define source_xml_addr "/home/wbyq/work_pc/opencv-3.4.9/data/haarcascades_cuda/haarcascade_frontalface_alt2.xml"

//將要檢測(cè)的圖片路徑
#define source_pix_addr "/mnt/hgfs/linux-share-dir/1.jpg"

//人臉檢測(cè)代碼
void Widget::opencv_face()
{
    static CvMemStorage* storage = 0;
    static CvHaarClassifierCascade* cascade = 0;

    fprintf( stderr, "start------------------------------>1 \n" );

    const char*cascade_name =source_xml_addr;

    //加載分類器
    cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
    if( !cascade )
    {
        fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
        return ;
    }

    //創(chuàng)建內(nèi)存空間
    storage = cvCreateMemStorage(0);

    //加載需要檢測(cè)的圖片
    const char* filename =source_pix_addr;
    IplImage* img = cvLoadImage( filename, 1 );

    if(img ==nullptr )
    {
        fprintf( stderr, "jpg load error! \n" );
        return;
    }

     fprintf( stderr, "start------------------------------>2 \n" );

    double scale=1.2;
    static CvScalar colors[] = {
        {{0,0,255}},{{0,128,255}},{{0,255,255}},{{0,255,0}},
        {{255,128,0}},{{255,255,0}},{{255,0,0}},{{255,0,255}}
    };//Just some pretty colors to draw with
    IplImage* gray = cvCreateImage(cvSize(img->width,img->height),8,1);
    IplImage* small_img=cvCreateImage(cvSize(cvRound(img->width/scale),cvRound(img->height/scale)),8,1);
    cvCvtColor(img,gray, CV_BGR2GRAY);
    cvResize(gray, small_img, CV_INTER_LINEAR);

    cvEqualizeHist(small_img,small_img); //直方圖均衡

    cvClearMemStorage(storage);

    double t = (double)cvGetTickCount();
    CvSeq* objects = cvHaarDetectObjects(small_img,
                                           cascade,
                                           storage,
                                           1.1,
                                           2,
                                           0/*CV_HAAR_DO_CANNY_PRUNING*/,
                                           cvSize(30,30));

       t = (double)cvGetTickCount() - t;

     fprintf( stderr, "start------------------------------>3 \n" );

    //遍歷找到對(duì)象和周圍畫(huà)盒
    for(int i=0;i<(objects->total);++i)
    {
        CvRect* r=(CvRect*)cvGetSeqElem(objects,i);
        cvRectangle(img, cvPoint(r->x*scale,r->y*scale), cvPoint((r->x+r->width)*scale,(r->y+r->height)*scale), colors[i%8]);
    }

     fprintf( stderr, "start------------------------------>4 \n" );

    for( int i = 0; i < (objects? objects->total : 0); i++ )
    {
        CvRect* r = (CvRect*)cvGetSeqElem( objects, i );
        CvPoint center;
        int radius;
        center.x = cvRound((r->x + r->width*0.5)*scale);
        center.y = cvRound((r->y + r->height*0.5)*scale);
        radius = cvRound((r->width + r->height)*0.25*scale);
        cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );
    }

    show_face(img);  //顯示檢測(cè)的結(jié)果

    cvReleaseImage(&gray);
    cvReleaseImage(&small_img);

    //釋放圖片
    cvReleaseImage( &img );
}
//顯示檢測(cè)的結(jié)果
void Widget::show_face(IplImage* img)
{
    /*將opecv的圖片轉(zhuǎn)為qimage格式*/
    uchar *imgData=(uchar *)img->imageData;

    QImage  my_image(imgData,img->width,img->height,QImage::Format_RGB888);
    my_image =my_image.rgbSwapped(); //BGR格式轉(zhuǎn)RGB
    QPixmap my_pix; //創(chuàng)建畫(huà)圖類

    my_pix.convertFromImage(my_image);

    /*在控件上顯示*/
    ui->label_display_face->setPixmap(my_pix);
}

widget.h文件代碼:

#ifndef WIDGET_H
#define WIDGET_H

#include 
//opencv include
#include 
#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    void opencv_face();
    ~Widget();
    void show_face(IplImage* img);
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

運(yùn)行代碼檢測(cè)結(jié)果如下:

img
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1329

    瀏覽量

    58034
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11509

    瀏覽量

    213714
  • OpenCV
    +關(guān)注

    關(guān)注

    32

    文章

    642

    瀏覽量

    42859
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    樹(shù)莓派上使用OpenCV和Python實(shí)現(xiàn)實(shí)時(shí)人臉檢測(cè)

    本文介紹了如何在樹(shù)莓派上,使用 OpenCV 和 Python 完成人臉檢測(cè)項(xiàng)目。該項(xiàng)目不僅描述了識(shí)別人臉所需要的具體步驟,同時(shí)還提供了很多擴(kuò)展知識(shí)。此外,該項(xiàng)目并不需要讀者了解詳細(xì)的
    的頭像 發(fā)表于 03-06 09:00 ?5.2w次閱讀

    基于openCV人臉檢測(cè)系統(tǒng)的設(shè)計(jì)

    通過(guò)對(duì)基于Adaboost人臉檢測(cè)算法的研究,利用該算法與計(jì)算機(jī)視覺(jué)類庫(kù)openCV進(jìn)行人臉檢測(cè)系統(tǒng)的設(shè)計(jì),
    發(fā)表于 12-23 14:19

    Qt使用openCV庫(kù)

    使用QtOpenCV進(jìn)行數(shù)字圖像處理了還是很不錯(cuò)的,參考網(wǎng)上一個(gè)帖子分享一經(jīng)驗(yàn):環(huán)境:Windows
    發(fā)表于 11-22 16:12

    【NanoPi2申請(qǐng)】基于opencv人臉識(shí)別門(mén)禁系統(tǒng)

    防與監(jiān)控的系統(tǒng),望批準(zhǔn)!謝謝!項(xiàng)目描述:項(xiàng)目簡(jiǎn)述:本項(xiàng)目旨在一個(gè)較高性能的嵌入式平臺(tái)上搭建一個(gè)linux系統(tǒng),利用opencv編程實(shí)現(xiàn)人臉識(shí)別。為了
    發(fā)表于 12-18 14:34

    基于QT+OpenCv的目標(biāo)跟蹤算法實(shí)現(xiàn)

    目標(biāo)跟蹤算法作為一種有著非常廣泛的應(yīng)用的算法,在航空航天、智能交通、智能設(shè)備等領(lǐng)域有著非常廣泛的應(yīng)用。本系列博客將教大家在410c開(kāi)發(fā)板上基于linux操作系統(tǒng)環(huán)境,采用QT+Opencv來(lái)實(shí)現(xiàn)
    發(fā)表于 09-21 10:42

    ARM LinuxOpenCV的移植和使用方法

    的應(yīng)用領(lǐng)域非常廣泛,包括圖像拼接、圖像降噪、產(chǎn)品質(zhì)檢、人機(jī)交互、人臉識(shí)別、動(dòng)作識(shí)別、動(dòng)作跟蹤、無(wú)人駕駛等。本篇介紹ARM Linux
    發(fā)表于 11-03 07:01

    基于linux操作系統(tǒng)實(shí)現(xiàn)一個(gè)人臉識(shí)別門(mén)禁系統(tǒng)

    形成組網(wǎng),實(shí)現(xiàn)一個(gè)人臉識(shí)別門(mén)禁系統(tǒng)??蛻舳藶榍度胧?b class='flag-5'>Linux設(shè)備,采用QT庫(kù)顯示界面,通過(guò)攝像頭采集圖像。服務(wù)器為PC上 Ubuntu系統(tǒng),
    發(fā)表于 12-14 06:24

    基于QT+OpenCV人臉識(shí)別-米爾iMX8M Plus開(kāi)發(fā)板的項(xiàng)目應(yīng)用

    opencv人臉檢測(cè)分類器。OpenCV編譯完成后已經(jīng)提供好了的。因?yàn)檫@里還需要涉及到訓(xùn)練模型,有了模型后才能更好地識(shí)別,所以還是簡(jiǎn)單介
    發(fā)表于 05-17 17:43

    基于openCV人臉檢測(cè)識(shí)別系統(tǒng)的設(shè)計(jì)

    通過(guò)對(duì)基于Adaboost人臉檢測(cè)算法的研究,利用該算法與計(jì)算機(jī)視覺(jué)類庫(kù)openCV進(jìn)行人臉檢測(cè)系統(tǒng)的設(shè)計(jì),
    發(fā)表于 06-15 10:53 ?477次下載
    基于<b class='flag-5'>openCV</b>的<b class='flag-5'>人臉</b><b class='flag-5'>檢測(cè)</b>識(shí)別系統(tǒng)的設(shè)計(jì)

    openCV人臉檢測(cè)系統(tǒng)的設(shè)計(jì)方案探究

    摘要: 通過(guò)對(duì)基于 Adaboost 人臉檢測(cè)算法的研究,利用該算法與計(jì)算機(jī)視覺(jué)類庫(kù) openCV 進(jìn)行人臉檢測(cè)系統(tǒng)的設(shè)計(jì),
    發(fā)表于 10-20 16:39 ?3次下載

    關(guān)于人臉識(shí)別技術(shù)原理分析和應(yīng)用

    臉識(shí)別系統(tǒng)可以在Linux 操作系統(tǒng)利用QT庫(kù)來(lái)開(kāi)發(fā)圖形界面,以OpenCV 圖像處理庫(kù)為基礎(chǔ)
    的頭像 發(fā)表于 08-26 11:42 ?5017次閱讀

    畢業(yè)設(shè)計(jì):電子/通信/物聯(lián)網(wǎng)/計(jì)算機(jī)專業(yè)選題目參考(嵌入式linux/單片機(jī)STM32/web/圖像

    :基于Opencv+Qt人臉識(shí)別門(mén)禁系統(tǒng)(電腦端/電腦+開(kāi)發(fā)板)項(xiàng)目簡(jiǎn)介:采用OpencvQt庫(kù)實(shí)現(xiàn)
    發(fā)表于 12-29 18:54 ?6次下載
    畢業(yè)設(shè)計(jì):電子/通信/物聯(lián)網(wǎng)/計(jì)算機(jī)專業(yè)選題目參考(嵌入式<b class='flag-5'>linux</b>/單片機(jī)STM32/web/<b class='flag-5'>圖像</b>)

    QT+OpenCV人臉識(shí)別—米爾iMX8MPlus開(kāi)發(fā)板項(xiàng)目

    本篇測(cè)評(píng)由電子工程世界的優(yōu)秀測(cè)評(píng)者“流行科技”提供。 此次測(cè)試的開(kāi)源項(xiàng)目,是基于QT+OpenCV人臉識(shí)別打卡項(xiàng)目。本次體驗(yàn)使用的是開(kāi)源的代碼,此代碼本來(lái)是運(yùn)行在WIN的,為了測(cè)試稍微進(jìn)行了修改
    的頭像 發(fā)表于 05-18 18:00 ?2686次閱讀
    <b class='flag-5'>QT+OpenCV</b><b class='flag-5'>人臉</b>識(shí)別—米爾iMX8MPlus開(kāi)發(fā)板項(xiàng)目

    LinuxQT+OpenCV實(shí)現(xiàn)人臉實(shí)時(shí)檢測(cè)(攝像頭)

    標(biāo)簽上。人臉檢測(cè)分類器采用OpenCV自帶的分類器,程序主要目的是介紹OpenCV配合QT如何進(jìn)
    的頭像 發(fā)表于 08-14 09:29 ?2719次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>下</b><b class='flag-5'>QT+OpenCV</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>人臉</b>實(shí)時(shí)<b class='flag-5'>檢測(cè)</b>(攝像頭)

    Android系統(tǒng)OpenCV人臉檢測(cè)模塊的設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《Android系統(tǒng)OpenCV人臉檢測(cè)模塊的設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-23 09:37 ?0次下載
    Android系統(tǒng)<b class='flag-5'>下</b><b class='flag-5'>OpenCV</b>的<b class='flag-5'>人臉</b><b class='flag-5'>檢測(cè)</b>模塊的設(shè)計(jì)