diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2013-10-15 08:52:25 +0200 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2013-10-15 08:52:25 +0200 | 
| commit | 864910a1fb753629d2852a91ffae4ebba374358c (patch) | |
| tree | 7fbee6d32dd5312e592ab3a41219a7daa9cf56ae /FTNoIR_Tracker_PT | |
| parent | a73f49c89299ec69dda73e3e7a16cebe76da373e (diff) | |
fix trackers for qt5
Assorted changes:
- make filenames unique, since automoc made a boo-boo
- adjust include paths, "QtGui" -> ""
- use std::shared_ptr in c++11 mode (thanks Patrick!)
- make class names unique, automoc sucks, but saves typing
- add a dummy class in one file since moronic automoc thinks
every target contains Q_OBJECTS!!!
Diffstat (limited to 'FTNoIR_Tracker_PT')
| -rw-r--r-- | FTNoIR_Tracker_PT/boost-compat.h | 3 | ||||
| -rw-r--r-- | FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp | 6 | ||||
| -rw-r--r-- | FTNoIR_Tracker_PT/ftnoir_tracker_pt.h | 9 | ||||
| -rw-r--r-- | FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h | 2 | ||||
| -rw-r--r-- | FTNoIR_Tracker_PT/pt_video_widget.cpp | 52 | ||||
| -rw-r--r-- | FTNoIR_Tracker_PT/pt_video_widget.h (renamed from FTNoIR_Tracker_PT/video_widget.h) | 43 | ||||
| -rw-r--r-- | FTNoIR_Tracker_PT/video_widget.cpp | 145 | 
7 files changed, 65 insertions, 195 deletions
diff --git a/FTNoIR_Tracker_PT/boost-compat.h b/FTNoIR_Tracker_PT/boost-compat.h index aea5e1a2..b5be237a 100644 --- a/FTNoIR_Tracker_PT/boost-compat.h +++ b/FTNoIR_Tracker_PT/boost-compat.h @@ -1,6 +1,5 @@  #pragma once  #include <memory> -#define shared_ptr auto_ptr  namespace boost { -    using std::auto_ptr; +    using std::shared_ptr;  }; diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp index d4741101..745d98e9 100644 --- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp +++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp @@ -12,10 +12,6 @@  #include <QFile>
  #include <QCoreApplication>
 -#ifdef OPENTRACK_API
 -#   define VideoWidget VideoWidget2
 -#endif
 -
  using namespace std;
  using namespace cv;
  using namespace boost;
 @@ -192,7 +188,7 @@ void Tracker::update_show_video_widget()  	{
  		const int VIDEO_FRAME_WIDTH  = 252;
  		const int VIDEO_FRAME_HEIGHT = 189;
 -		video_widget = new VideoWidget(video_frame, this);
 +        video_widget = new PTVideoWidget(video_frame, this);
  		QHBoxLayout* video_layout = new QHBoxLayout();
  		video_layout->setContentsMargins(0, 0, 0, 0);
  		video_layout->addWidget(video_widget);
 diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h index 7dcfc8bb..2430f5f0 100644 --- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h +++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h @@ -11,15 +11,13 @@  #ifdef OPENTRACK_API
  #   include "ftnoir_tracker_base/ftnoir_tracker_base.h"
  #   include "facetracknoir/global-settings.h"
 -#else
 -#   include "..\ftnoir_tracker_base\ftnoir_tracker_base.h"
  #endif
  #include "ftnoir_tracker_pt_settings.h"
  #include "frame_observer.h"
  #include "camera.h"
  #include "point_extractor.h"
  #include "point_tracker.h"
 -#include "video_widget.h"
 +#include "pt_video_widget.h"
  #include "timer.h"
  #include <QThread>
 @@ -82,7 +80,6 @@ protected:  	// --- tracking chain ---
  #ifdef OPENTRACK_API
 -#define VideoWidget VideoWidget2
      CVCamera       camera;
  #else
  	VICamera       camera;
 @@ -101,7 +98,9 @@ protected:  	void update_show_video_widget();
  	bool show_video_widget;
 -	VideoWidget* video_widget;
 +#ifdef OPENTRACK_API
 +    PTVideoWidget* video_widget;
 +#endif
  	QFrame*      video_frame;
  	// --- misc ---
 diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h index 14df7ede..3e1af50a 100644 --- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h +++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h @@ -16,7 +16,7 @@  #include "ftnoir_tracker_pt_settings.h"
  #include "ftnoir_tracker_pt.h"
  #include "trans_calib.h"
 -#include "video_widget.h"
 +#include "pt_video_widget.h"
  #include "ui_FTNoIR_PT_Controls.h"
  #include <QTimer>
 diff --git a/FTNoIR_Tracker_PT/pt_video_widget.cpp b/FTNoIR_Tracker_PT/pt_video_widget.cpp new file mode 100644 index 00000000..03c42fc7 --- /dev/null +++ b/FTNoIR_Tracker_PT/pt_video_widget.cpp @@ -0,0 +1,52 @@ +/* Copyright (c) 2012 Patrick Ruoff
 + *
 + * Permission to use, copy, modify, and/or distribute this software for any
 + * purpose with or without fee is hereby granted, provided that the above
 + * copyright notice and this permission notice appear in all copies.
 + *
 + * 20130312, WVR: Add 7 lines to resizeGL after resize_frame. This should lower CPU-load.
 + */
 +
 +#include "pt_video_widget.h"
 +
 +#include <QDebug>
 +#include <QHBoxLayout>
 +
 +using namespace cv;
 +using namespace std;
 +
 +void PTVideoWidget::update_image(const cv::Mat& frame)
 +{
 +    QMutexLocker foo(&mtx);
 +    QImage qframe = QImage(frame.cols, frame.rows, QImage::Format_RGB888);
 +    uchar* data = qframe.bits();
 +    const int pitch = qframe.bytesPerLine();
 +    for (int y = 0; y < frame.rows; y++)
 +        for (int x = 0; x < frame.cols; x++)
 +        {
 +            const int pos = 3 * (y*frame.cols + x);
 +            data[y * pitch + x * 3 + 0] = frame.data[pos + 2];
 +            data[y * pitch + x * 3 + 1] = frame.data[pos + 1];
 +            data[y * pitch + x * 3 + 2] = frame.data[pos + 0];
 +        }
 +    qframe = qframe.scaled(size(), Qt::IgnoreAspectRatio, Qt::FastTransformation);
 +    pixmap = QPixmap::fromImage(qframe);
 +}
 +
 +// ----------------------------------------------------------------------------
 +VideoWidgetDialog::VideoWidgetDialog(QWidget *parent, FrameProvider* provider)
 +    : QDialog(parent),
 +      video_widget(NULL)
 +{
 +    const int VIDEO_FRAME_WIDTH  = 640;
 +    const int VIDEO_FRAME_HEIGHT = 480;
 +
 +    video_widget = new PTVideoWidget(this, provider);
 +
 +    QHBoxLayout* layout = new QHBoxLayout();
 +    layout->setContentsMargins(0, 0, 0, 0);
 +    layout->addWidget(video_widget);
 +    if (this->layout()) delete this->layout();
 +    setLayout(layout);
 +    resize(VIDEO_FRAME_WIDTH, VIDEO_FRAME_HEIGHT);
 +}
 diff --git a/FTNoIR_Tracker_PT/video_widget.h b/FTNoIR_Tracker_PT/pt_video_widget.h index 3164dacc..e67e6d57 100644 --- a/FTNoIR_Tracker_PT/video_widget.h +++ b/FTNoIR_Tracker_PT/pt_video_widget.h @@ -5,11 +5,10 @@   * copyright notice and this permission notice appear in all copies.
   */
 -#ifndef VIDEOWIDGET_H
 -#define VIDEOWIDGET_H
 +#pragma once
  #include "frame_observer.h"
 -
 +#include <QObject>
  #include <QTime>
  #include <QDialog>
  #include <opencv2/opencv.hpp>
 @@ -26,39 +25,12 @@  #include <QPaintEvent>
  #include <QTimer>
 -#ifndef OPENTRACK_API
 -// ----------------------------------------------------------------------------
 -// OpenGL based widget to display an OpenCV image with some points on top
 -class VideoWidget : public QGLWidget, public FrameObserver
 -{
 -	Q_OBJECT
 -
 -public:
 -    VideoWidget(QWidget *parent, FrameProvider* provider) : QGLWidget(parent), FrameObserver(provider) {}
 -
 -	virtual void initializeGL();
 -	virtual void resizeGL(int w, int h);
 -	virtual void paintGL();
 -
 -	void update_frame_and_points();
 -
 -private:
 -	void resize_frame();
 -
 -	cv::Mat frame;
 -	QImage qframe;
 -	QImage resized_qframe;
 -
 -	boost::shared_ptr< std::vector<cv::Vec2f> > points;
 -};
 -#else
 -/* Qt moc likes to skip over preprocessor directives -sh */
 -class VideoWidget2 : public QWidget, public FrameObserver
 +class PTVideoWidget : public QWidget, public FrameObserver
  {
      Q_OBJECT
  public:
 -    VideoWidget2(QWidget *parent, FrameProvider* provider) : QWidget(parent), /* to avoid linker errors */ FrameObserver(provider) {
 +    PTVideoWidget(QWidget *parent, FrameProvider* provider) : QWidget(parent), /* to avoid linker errors */ FrameObserver(provider) {
          connect(&timer, SIGNAL(timeout()), this, SLOT(update()));
          timer.start(45);
      }
 @@ -75,7 +47,6 @@ private:      QPixmap pixmap;
      QTimer timer;
  };
 -#endif
  // ----------------------------------------------------------------------------
  // A VideoWidget embedded in a dialog frame
 @@ -86,10 +57,8 @@ public:  	VideoWidgetDialog(QWidget *parent, FrameProvider* provider);
  	virtual ~VideoWidgetDialog() {}
 -    VideoWidget2* get_video_widget() { return video_widget; }
 +    PTVideoWidget* get_video_widget() { return video_widget; }
  private:
 -    VideoWidget2* video_widget;
 +    PTVideoWidget* video_widget;
  };
 -
 -#endif // VIDEOWIDGET_H
 diff --git a/FTNoIR_Tracker_PT/video_widget.cpp b/FTNoIR_Tracker_PT/video_widget.cpp deleted file mode 100644 index 0d31620f..00000000 --- a/FTNoIR_Tracker_PT/video_widget.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (c) 2012 Patrick Ruoff
 - *
 - * Permission to use, copy, modify, and/or distribute this software for any
 - * purpose with or without fee is hereby granted, provided that the above
 - * copyright notice and this permission notice appear in all copies.
 - *
 - * 20130312, WVR: Add 7 lines to resizeGL after resize_frame. This should lower CPU-load.
 - */
 -
 -#include "video_widget.h"
 -
 -#include <QDebug>
 -#include <QHBoxLayout>
 -
 -using namespace cv;
 -using namespace std;
 -#ifndef OPENTRACK_API
 -using namespace boost;
 -#endif
 -#ifndef OPENTRACK_API
 -// ----------------------------------------------------------------------------
 -void VideoWidget::initializeGL()
 -{
 -	glClearColor(0.0, 0.0, 0.0, 0.0);
 -	glMatrixMode(GL_MODELVIEW);
 -	glLoadIdentity();
 -}
 -
 -void VideoWidget::resizeGL(int w, int h)
 -{
 -	// setup 1 to 1 projection
 -	glViewport(0, 0, w, h);
 -	glMatrixMode(GL_PROJECTION);
 -	glLoadIdentity();
 -	glOrtho(0, w, 0, h, -1, 1);
 -	resize_frame();
 -	glDisable(GL_DEPTH_TEST);
 -	glBegin(GL_QUADS);
 -	glVertex2f(0,0);
 -	glVertex2f(1,0);
 -	glVertex2f(1,1);
 -	glVertex2f(0,1);
 -	glEnd(); 
 -}
 -
 -void VideoWidget::paintGL()
 -{
 -	glClear(GL_COLOR_BUFFER_BIT);
 -	if (!resized_qframe.isNull())
 -	{
 -		glDrawPixels(resized_qframe.width(), resized_qframe.height(), GL_RGBA, GL_UNSIGNED_BYTE, resized_qframe.bits());
 -		
 -		const int crosshair_radius = 10;
 -		const int crosshair_thickness = 1;
 -
 -		if (points)
 -		{
 -			glColor3f(1.0, 0.0, 0.0);
 -			glLineWidth(crosshair_thickness);
 -			int x,y;
 -			for (vector<Vec2f>::iterator iter = points->begin();
 -				 iter != points->end();
 -				 ++iter)
 -			{
 -				x = (*iter)[0] * resized_qframe.width() + resized_qframe.width()/2.0  + 0.5;
 -				y = (*iter)[1] * resized_qframe.width() + resized_qframe.height()/2.0 + 0.5;
 -			
 -				glBegin(GL_LINES);
 -				glVertex2i(x-crosshair_radius, y);
 -				glVertex2i(x+crosshair_radius, y);
 -				glEnd();
 -				glBegin(GL_LINES);
 -				glVertex2i(x, y-crosshair_radius);
 -				glVertex2i(x, y+crosshair_radius);
 -				glEnd();
 -			}
 -		}
 -	}
 -	glFlush();
 -}
 -
 -
 -void VideoWidget::resize_frame()
 -{
 -	if (!qframe.isNull())
 -		resized_qframe = qframe.scaled(this->size(), Qt::KeepAspectRatio);
 -}
 -
 -
 -void VideoWidget::update_frame_and_points()
 -{
 -	if (!get_frame_and_points(frame, points)) return;
 -
 -	// convert to QImage
 -	if (frame.channels() == 3)
 -		qframe = QImage((const unsigned char*)(frame.data), frame.cols, frame.rows, frame.step, QImage::Format_RGB888).rgbSwapped();
 -	else if (frame.channels() == 1)
 -		qframe = QImage((const unsigned char*)(frame.data), frame.cols, frame.rows, frame.step, QImage::Format_Indexed8);
 -	qframe = QGLWidget::convertToGLFormat(qframe);
 -
 -	resize_frame();
 -	updateGL();
 -}
 -
 -#else
 -void VideoWidget2::update_image(const cv::Mat& frame)
 -{
 -    QMutexLocker foo(&mtx);
 -    QImage qframe = QImage(frame.cols, frame.rows, QImage::Format_RGB888);
 -    uchar* data = qframe.bits();
 -    const int pitch = qframe.bytesPerLine();
 -    for (int y = 0; y < frame.rows; y++)
 -        for (int x = 0; x < frame.cols; x++)
 -        {
 -            const int pos = 3 * (y*frame.cols + x);
 -            data[y * pitch + x * 3 + 0] = frame.data[pos + 2];
 -            data[y * pitch + x * 3 + 1] = frame.data[pos + 1];
 -            data[y * pitch + x * 3 + 2] = frame.data[pos + 0];
 -        }
 -    qframe = qframe.scaled(size(), Qt::IgnoreAspectRatio, Qt::FastTransformation);
 -    pixmap = QPixmap::fromImage(qframe);
 -}
 -#endif
 -
 -// ----------------------------------------------------------------------------
 -VideoWidgetDialog::VideoWidgetDialog(QWidget *parent, FrameProvider* provider)
 -    : QDialog(parent),
 -      video_widget(NULL)
 -{
 -    const int VIDEO_FRAME_WIDTH  = 640;
 -    const int VIDEO_FRAME_HEIGHT = 480;
 -
 -#ifdef OPENTRACK_API
 -    video_widget = new VideoWidget2(this, provider);
 -#else
 -    video_widget = new VideoWidget(this, provider);
 -#endif
 -
 -    QHBoxLayout* layout = new QHBoxLayout();
 -    layout->setContentsMargins(0, 0, 0, 0);
 -    layout->addWidget(video_widget);
 -    if (this->layout()) delete this->layout();
 -    setLayout(layout);
 -    resize(VIDEO_FRAME_WIDTH, VIDEO_FRAME_HEIGHT);
 -}
  | 
