一、环境概述
在虚拟机上运行的Ubuntu 18.04 64位操作系统搭配了OpenCV 3.4.9和QT 5.12版本。关于在Ubuntu上编译OpenCV的详细步骤,请参考链接:https://www.php.cn/link/1c1f1beef683946794edf22079849283。
二、创建QT工程并集成OpenCV库
以下提供了一个简单的示例,利用OpenCV内置的分类器对图像进行人脸检测并标记。
OpenCV源码中的人脸检测分类器位于: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
<p>DEFINES += QT_DEPRECATED_WARNINGS</p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/ai/1526">
<img src="https://img.php.cn/upload/ai_manual/000/000/000/175680217260032.jpg" alt="美图AI开放平台">
</a>
<div class="aritcle_card_info">
<a href="/ai/1526">美图AI开放平台</a>
<p>美图推出的AI人脸图像处理平台</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="美图AI开放平台">
<span>53</span>
</div>
</div>
<a href="/ai/1526" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="美图AI开放平台">
</a>
</div>
<p>SOURCES += \
main.cpp \
widget.cpp</p><p>HEADERS += \
widget.h</p><p>FORMS += \
widget.ui</p><p>qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target</p><p>linux {
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</p><pre class="brush:php;toolbar:false;"><code>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"</p><h1>include "ui_widget.h"</h1><p>Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
opencv_face();
}</p><p>Widget::~Widget()
{
delete ui;
}</p><h1>define source_xml_addr "/home/wbyq/work_pc/opencv-3.4.9/data/haarcascades_cuda/haarcascade_frontalface_alt2.xml"</h1><h1>define source_pix_addr "/mnt/hgfs/linux-share-dir/1.jpg"</h1><p>void Widget::opencv_face()
{
static CvMemStorage<em> storage = 0;
static CvHaarClassifierCascade</em> cascade = 0;
fprintf( stderr, "start------------------------------>1 \n" );
const char<em> cascade_name = source_xml_addr;
cascade = (CvHaarClassifierCascade</em>)cvLoad( cascade_name, 0, 0, 0 );
if( !cascade )
{
fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
return ;
}
storage = cvCreateMemStorage(0);
const char<em> filename = source_pix_addr;
IplImage</em> 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}}
};
IplImage<em> gray = cvCreateImage(cvSize(img->width,img->height),8,1);
IplImage</em> 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<em> objects = cvHaarDetectObjects(small_img,
cascade,
storage,
1.1,
2,
0,
cvSize(30,30));
t = (double)cvGetTickCount() - t;
fprintf( stderr, "start------------------------------>3 \n" );
for(int i=0; i < objects->total; ++i)
{
CvRect</em> r = (CvRect<em>)cvGetSeqElem(objects,i);
cvRectangle(img, cvPoint(r->x</em>scale,r->y<em>scale), cvPoint((r->x+r->width)</em>scale,(r->y+r->height)<em>scale), colors[i%8]);
}
fprintf( stderr, "start------------------------------>4 \n" );
for( int i = 0; i < objects->total; i++ )
{
CvRect</em> r = (CvRect<em>)cvGetSeqElem( objects, i );
CvPoint center;
int radius;
center.x = cvRound((r->x + r->width</em>0.5)<em>scale);
center.y = cvRound((r->y + r->height</em>0.5)<em>scale);
radius = cvRound((r->width + r->height)</em>0.25*scale);
cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );
}
show_face(img);
cvReleaseImage(&gray);
cvReleaseImage(&small_img);
cvReleaseImage( &img );
}</p><p>void Widget::show_face(IplImage<em> img)
{
uchar </em>imgData = (uchar *)img->imageData;
QImage my_image(imgData,img->width,img->height,QImage::Format_RGB888);
my_image = my_image.rgbSwapped();
QPixmap my_pix;
my_pix.convertFromImage(my_image);
ui->label_display_face->setPixmap(my_pix);
}widget.h文件内容如下:
#ifndef WIDGET_H</p><h1>define WIDGET_H</h1><h1>include <QWidget></h1><h1>include <cv.h></h1><h1>include <cxcore.h></h1><h1>include <highgui.h></h1><p>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE</p><p>class Widget : public QWidget
{
Q_OBJECT</p><p>public:
Widget(QWidget <em>parent = nullptr);
~Widget();
void opencv_face();
void show_face(IplImage</em> img);</p><p>private:
Ui::Widget *ui;
};</p><h1>endif // WIDGET_H运行上述代码后,人脸检测结果展示如下:

以上就是Linux下QT配合OpenCV完成图像处理(实现基本的人脸检测)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号