Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于opencv和qt的人脸检测_C++_Qt_Opencv - Fatal编程技术网

C++ 基于opencv和qt的人脸检测

C++ 基于opencv和qt的人脸检测,c++,qt,opencv,C++,Qt,Opencv,我正在尝试使用opencv和qt实现一个实时人脸检测程序 主窗口 #include <QMainWindow> #include <opencv/cv.h> #include <opencv/highgui.h> #include <QLabel> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT

我正在尝试使用opencv和qt实现一个实时人脸检测程序 主窗口

 #include <QMainWindow>
 #include <opencv/cv.h>
 #include <opencv/highgui.h>
 #include <QLabel>

 namespace Ui {
 class MainWindow;
 }

 class MainWindow : public QMainWindow
  {
   Q_OBJECT
   public:
 explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Ui::MainWindow* _ui;
CvCapture* _capture;
IplImage*       _img;
CvHaarClassifierCascade* _cascade;
CvMemStorage*   _storage;
QList<CvScalar>  _colors;
QPixmap*         _pixmap;
QTimer*          _timer;
QLabel* labelCapture;
private slots:
void on_actionCapture_triggered();
 };
//#endif // MAINWINDOW_H
#包括
#包括
#包括
#包括
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
用户界面::主窗口*\u用户界面;
CvCapture*\u capture;
IplImage*\u img;
CvHaarClassifierCascade*_级联;
CvMemStorage*_存储;
QList_颜色;
QPixmap*_pixmap;
QTimer*\u定时器;
QLabel*标签捕获;
专用插槽:
已触发动作捕捉时无效();
};
//#endif//main窗口
main.cpp

  #include <QtGui/QApplication>
  #include "mainwindow.h"

   int main(int argc, char *argv[])
  {
   QApplication a(argc, argv);
   MainWindow w;
    w.show();

   return a.exec();
    }
#包括
#包括“mainwindow.h”
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
主窗口w;
w、 show();
返回a.exec();
}
mainwindow.cpp

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "opencv/cv.h"
    #include "opencv/highgui.h"
    #include "opencv/cvaux.h"
    #include <QTimer>
    #include <QLabel>

    MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  _ui(new Ui::MainWindow)
  {
_ui->setupUi(this);
QLabel* labelCapture;
_capture = cvCaptureFromCAM( 0 );
_cascade = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt2.xml");
_storage = cvCreateMemStorage(0);

_colors << cvScalar(0.0,0.0,255.0) << cvScalar(0.0,128.0,255.0)
        << cvScalar(0.0,255.0,255.0) << cvScalar(0.0,255.0,0.0)
        << cvScalar(255.0,128.0,0.0) << cvScalar(255.0,255.0,0.0)
        << cvScalar(255.0,0.0,0.0) << cvScalar(255.0,0.0,255.0);

  _timer = new QTimer(this);
  connect(_timer, SIGNAL(timeout()), this, SLOT(on_actionCapture_triggered()));
  _timer->start(10);
  labelCapture=new QLabel();
   }

  MainWindow::~MainWindow()
  {
cvReleaseImage(&_img);
cvReleaseCapture(&_capture);
delete _ui;
  }

   void MainWindow::on_actionCapture_triggered()
   {
// Query camera for next frame
_img = cvQueryFrame( _capture );

if (_img)
{
    // Detect objects
    cvClearMemStorage( _storage );

    CvSeq* objects = cvHaarDetectObjects(_img,
                                         _cascade,
                                         _storage,
                                         1.1,
                                         3,
                                         CV_HAAR_DO_CANNY_PRUNING,
                                         cvSize( 100, 100 ));

    int n = (objects ? objects->total : 0);

    CvRect* r;
    // Loop through objects and draw boxes
    for( int i = 0; i < n; i++ )
    {
        r = ( CvRect* )cvGetSeqElem( objects, i );
        cvRectangle( _img,
                     cvPoint( r->x, r->y ),
                     cvPoint( r->x + r->width, r->y + r->height ),
                     _colors[i%8]
                    );
    }

    // Convert IplImage to QImage
    QImage image = QImage((const uchar *)_img->imageData,
                                         _img->width,
                                         _img->height,
                                         QImage::Format_RGB888).rgbSwapped();
    _pixmap = new QPixmap(QPixmap::fromImage(image));
     _ui->labelCapture->setPixmap(*_pixmap);
   }
   }
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括“opencv/cv.h”
#包括“opencv/highgui.h”
#包括“opencv/cvaux.h”
#包括
#包括
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
_用户界面(新用户界面::主窗口)
{
_用户界面->设置用户界面(此);
QLabel*标签捕获;
_捕获=cvCaptureFromCAM(0);
_cascade=(CvHaarClassifierCascade*)cvLoad(“haarcascade_frontalface_alt2.xml”);
_存储=cvCreateMemStorage(0);
_颜色(高度),
_颜色[i%8]
);
}
//将IplImage转换为QImage
QImage image=QImage((常量*)\u img->imageData,
_img->width,
_img->高度,
QImage::Format_RGB888).rgbSwapped();
_pixmap=新的QPixmap(QPixmap::fromImage(image));
_ui->labelCapture->setPixmap(*\u pixmap);
}
}
但是我得到了以下错误。。。 操作捕捉触发()上的函数 类ui::mainWindow没有名为“labelCapture”的成员
请帮助……

这不是OpenCV的问题。您误解了Qt的基本原理

我建议您使用Qt Creator创建新项目,然后使用Qt Creators designer创建用户界面。因此,如果您做到了这一点,您将使用private
Ui::MainWindow*Ui
创建外观整洁的代码,然后使用Qt Creators designer创建您的操作并对其编码


祝你好运

如果表单上有QLABEL,则将其重命名为“labelCapture”,如果没有,则必须使用相同的名称创建一个QLABEL,或者可以将代码更改为QLABEL的名称。
祝你好运

您的命名空间是Ui而不是Ui。当错误变成token->之前的预期主表达式时,它是区分大小写的,并且我已经在主窗口上声明了_ui