在zedboard板子上运行人脸检测例子
2014-04-21 11:40
393 查看
由于opencv 的highgui使用GTK在zedboard下没有交叉编译成功,所以本程序使用QT做了个简单的界面,在QT中调用Opencv函数,进行人脸检测。首先建立QT项目,在主界面中加入一个Lable,并设置成一定大小。mainwindow.h 的代码如下
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <cv.h> #include <opencv2/highgui/highgui.hpp> #include <opencv2/objdetect/objdetect.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <QTimer> #include <QPixmap> namespace Ui { class MainWindow; } using namespace cv; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void detectAndDraw( Mat& img, CascadeClassifier& cascade, double scale); private: Ui::MainWindow *ui; CvCapture *capture; IplImage *iplImg, *iplImg2; Mat frame,frameCopy; QTimer *timer; double scale ; string cascadeName ; CascadeClassifier cascade; private slots: void getFrame(); }; #endif // MAINWINDOW_Hmainwindow.cpp 中代码如下
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { qDebug()<<CV_VERSION; ui->setupUi(this); timer = new QTimer(this); capture = cvCaptureFromCAM(0); scale = 1; cascadeName = "/home/wjj/workplace/test/lbpcascade_frontalface.xml"; if(!cascade.load(cascadeName)){ qDebug()<<"ERROR: Could not load classifier cascade"; } if(capture == NULL){ qDebug()<<"ERROR: Capture from CAM didn't work"; } timer->start(50); connect(timer,SIGNAL(timeout()),this,SLOT(getFrame())); } void MainWindow::getFrame() { iplImg =cvQueryFrame(capture); frame = iplImg; if(iplImg->origin == IPL_ORIGIN_TL) frame.copyTo(frameCopy); else flip(frame,frameCopy,0); detectAndDraw(frameCopy,cascade,scale); } void MainWindow::detectAndDraw( Mat& img, CascadeClassifier& cascade, double scale){ double t = 0; int i=0; vector<Rect> faces; Mat gray, smallImg( cvRound (img.rows/scale), cvRound(img.cols/scale), CV_8UC1 ); cvtColor( img, gray, CV_BGR2GRAY ); cv::resize( gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR ); equalizeHist( smallImg, smallImg ); t = (double)cvGetTickCount(); cascade.detectMultiScale( smallImg, faces, 1.1, 2, 0 //|CV_HAAR_FIND_BIGGEST_OBJECT //|CV_HAAR_DO_ROUGH_SEARCH |CV_HAAR_SCALE_IMAGE , Size(30, 30) ); t = (double)cvGetTickCount() - t; printf( "detection time = %g ms\n", t/((double)cvGetTickFrequency()*1000.) ); for( vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++, i++ ) { rectangle( img, cvPoint(cvRound(r->x*scale), cvRound(r->y*scale)), cvPoint(cvRound((r->x + r->width-1)*scale), cvRound((r->y + r->height-1)*scale)), Scalar(CV_RGB(0,0,255)), 1, 8, 0); } QImage image = QImage((const uchar*)(img.data), img.cols, img.rows, QImage::Format_RGB888).rgbSwapped(); ui->label->setPixmap(QPixmap::fromImage(image)); } MainWindow::~MainWindow() { timer->stop(); cvReleaseCapture(&capture); delete ui; }在PC上运行该文件时,需要修改后缀为pro的文件加入如下语句INCLUDEPATH +=/usr/local/include/opencv \/usr/local/include/opencv2LIBS += /usr/local/lib/libopencv_core.so\/usr/local/lib/libopencv_highgui.so\/usr/local/lib/libopencv_imgproc.so\/usr/local/lib/libopencv_objdetect.so可以查看下效果。将QT和opencv一起移植到板卡里修改qmake.conf该文件位于所编译的嵌入式QT文件夹下
/opt/zedboard/qt/install/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf在此文件中加入
INCLUDEPATH += /opt/zedboard/opencv_zed/opencv-2.4.4/install/include \
/opt/zedboard/opencv_zed/opencv-2.4.4/install/include/opencv \
/opt/zedboard/opencv_zed/opencv-2.4.4/install/include/opencv2
LIBS += /opt/zedboard/opencv_zed/opencv-2.4.4/install/lib/libopencv_highgui.so \
/opt/zedboard/opencv_zed/opencv-2.4.4/install/lib/libopencv_core.so \
/opt/zedboard/opencv_zed/opencv-2.4.4/install/lib/libopencv_imgproc.s o \
/opt/zedboard/opencv_zed/opencv-2.4.4/install/lib/*.s这里opencv的链接库是交叉编译好了的链接库运行qmake -projectqmakemake 生成可执行文件
相关文章推荐
- SDL2.0例子代码分析---代码运行平台检测
- 如何使基于OpenCV库的人脸检测系统在其它机器上运行
- Android配置opencv开发环境并运行face-detection 人脸检测例程
- 人脸检测,人脸识别,机器学习库Dlib在VS2015上的详细安装教程,示例运行
- 使用Dlib来运行基于CNN的人脸检测
- python中使用OpenCV进行人脸检测的例子
- OpenCV例子四:摄像头实时人脸检测
- 人脸检测的API例子
- caffe_实战之两个简单的例子(物体分类和人脸检测)
- fast-r-cnn人脸检测运行记录
- 人脸肤色相似度检测——程序及运行结果
- 学习OpenCV——行人检测&人脸检测(总算运行出来了)
- 学习OpenCV——行人检测&人脸检测(总算运行出来了)
- 裸机Ubuntu16.04配置Dlib19.4 (Python人脸检测例子)
- 人脸检测的API例子
- 人脸检测、提取特征点(dlib下的三个例子)
- 裸机Ubuntu16.04配置Dlib19.4 (Python人脸检测例子)
- 学习OpenCV——行人检测&人脸检测(总算运行出来了)
- 学习OpenCV——行人检测&人脸检测(总算运行出来了)
- python中使用OpenCV进行人脸检测的例子