Merge remote-tracking branch 'upstream/devel' into devel
[mldemos:mldemos.git] / _IOPlugins / PCAFaces / pcaprojector.h
1 /*********************************************************************\r
2 MLDemos: A User-Friendly visualization toolkit for machine learning\r
3 Copyright (C) 2010  Basilio Noris\r
4 Contact: mldemos@b4silio.com\r
5 \r
6 This library is free software; you can redistribute it and/or\r
7 modify it under the terms of the GNU Lesser General Public License,\r
8 version 3 as published by the Free Software Foundation.\r
9 \r
10 This library is distributed in the hope that it will be useful, but\r
11 WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
13 Lesser General Public License for more details.\r
14 \r
15 You should have received a copy of the GNU Lesser General Public\r
16 License along with this library; if not, write to the Free\r
17 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
18 *********************************************************************/\r
19 #ifndef _PCAPROJECTOR_H_\r
20 #define _PCAPROJECTOR_H_\r
21 \r
22 #include "public.h"\r
23 #include "ui_PCAFaces.h"\r
24 #include "widget.h"\r
25 #include "sampleManager.h"\r
26 #include "eigenFaces.h"\r
27 #include "cameraGrabber.h"\r
28 #include <QMutex>\r
29 #include <QMutexLocker>\r
30 \r
31 class PCAProjector : public QObject\r
32 {\r
33         Q_OBJECT\r
34 \r
35         Ui::PCAFacesDialog *options;\r
36         EigenFaces eig;\r
37         IplImage *image, *display, *samples;\r
38         QNamedWindow *imageWindow;\r
39         QNamedWindow *samplesWindow;\r
40     QLabel *eigenVectorLabel, *eigenValueLabel;\r
41         SampleManager sm;\r
42         QPoint start;\r
43         QRect selection;\r
44         bool bFromWebcam;\r
45         CameraGrabber *grabber;\r
46         QMutex imageMutex;\r
47         int timerID;\r
48 \r
49         void mouseCallBack(int x,int y,int flags,int params);\r
50 \r
51         void SetImage(IplImage *image);\r
52         void RefreshDataset();\r
53         void FixLabels(SampleManager &sm);\r
54 public:\r
55     PCAProjector(Ui::PCAFacesDialog *options);\r
56     ~PCAProjector();\r
57         void timerEvent(QTimerEvent *event);\r
58         std::pair<std::vector<fvec>,ivec> GetData();\r
59 \r
60 signals:\r
61         void Update();\r
62         public slots:\r
63                 void LoadImage();\r
64                 void FromClipboard();\r
65                 void FromWebcam();\r
66                 void AddImage();\r
67                 void LoadDataset();\r
68                 void SaveDataset();\r
69                 void AddDataset();\r
70                 void ClearDataset();\r
71                 void DrawEigen();\r
72 \r
73                 void SelectionStart(QMouseEvent *event);\r
74                 void SelectionStop(QMouseEvent *event);\r
75                 void SelectionResize(QMouseEvent *event);\r
76 \r
77                 void DatasetClick(QMouseEvent *event);\r
78                 void DragImage(QDragEnterEvent *event);\r
79                 void DropImage(QDropEvent *event);\r
80                 void DragDataset(QDragEnterEvent *event);\r
81                 void DropDataset(QDropEvent *event);\r
82 };\r
83 \r
84 #endif // _PCAPROJECTOR_H_\r