一、dlib
Dlib是一個機器學習的C++庫,包含了許多機器學習常用的算法。下載:http://www.dlib.net/ml.html
二、安轉qt,設置環境變量,用qt自帶的mingw工具編譯dlib庫
工具路徑:
設置環境變量:
三、dlib
解壓,並新建安裝目錄dlib:
四、cmake
下載:https://cmake.org/download/
使用cmake生成Makefile:
Configured點擊兩次後,點擊Generate,在安轉目錄下生成Makefile:
五、編譯
進入安轉目錄下,編譯:
完成編譯:
六、安裝dlib
安裝完成:
七、測試
參考G:\dlib-19.7\examples\face_detection_ex.cpp例子,新建qt工程:
編譯運行:
八、源碼
.pro
QT +=coregui
QMAKE_CXXFLAGS+=-std=c++0x
greaterThan(QT_MAJOR_VERSION,4):QT+=widgets
TARGET=dlibTest
TEMPLATE=app
SOURCES+=main.cpp\
mainwindow.cpp
HEADERS +=mainwindow.h
FORMS +=mainwindow.ui
LIBS+=$$PWD/dlib/lib/libdlib.a
INCLUDEPATH+=$$PWD/dlib
mainwindow.cpp:
#include"mainwindow.h"
#include"ui_mainwindow.h"
#include<dlib/image_processing/frontal_face_detector.h>
#include<dlib/gui_widgets.h>
#include<dlib/image_io.h>
#include<dlib/image_processing.h>
#include<iostream>
#include<QDebug>
#include<QFileDialog>
#include<QString>
#include<QTextCodec>
#include<QImage>
#include<QPainter>
usingnamespacedlib;
MainWindow::MainWindow(QWidget*parent):
QMainWindow(parent),
ui(newUi::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
deleteui;
}
voidMainWindow::on_pushButton_clicked()
{
QStringimgName=QFileDialog::getOpenFileName(this,tr("File"),tr("./"),tr("ImageFile(*.png*.jpg)"));
if(imgName.isNull())return;
QTextCodec*code=QTextCodec::codecForName("gb2312");
std::stringname=code->fromUnicode(imgName).data();
//--------------------------------------------------
QImage*labImg=newQImage;
if(!(labImg->load(name.data())))
{
deletelabImg;
return;
}
QPixmappixmap=QPixmap::fromImage(*labImg);
QPainterpainter(&pixmap);
painter.setPen(Qt::red);
//--------------------------------------------------
frontal_face_detectordetector=get_frontal_face_detector();
dlib::array2d<unsignedchar>img;
load_image(img,name.data());
dlib::pyramid_up(img);
std::vector<dlib::rectangle>dets=detector(img);
dlib::rectanglemyRect;
intfaceCount=dets.size();
ui->textBrowser->append(QString::number(faceCount));
for(int32_ti=0;i<faceCount;i++)
{
myRect=dets.at(i);
ui->textBrowser->append("x:"+QString::number(myRect.left()/2));
ui->textBrowser->append("y:"+QString::number(myRect.top()/2));
ui->textBrowser->append("width:"+QString::number(myRect.width()/2));
ui->textBrowser->append("height:"+QString::number(myRect.height()/2));
painter.drawRect(myRect.left()/2,myRect.top()/2,myRect.width()/2,myRect.height()/2);
}
ui->label->setPixmap(pixmap);
}