1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#ifndef CVVISUAL_MATCH_SCENE
#define CVVISUAL_MATCH_SCENE
#include <vector>
#include <QWidget>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsProxyWidget>
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "cvvmatch.hpp"
#include "cvvkeypoint.hpp"
#include "zoomableproxyobject.hpp"
#include "../synczoomwidget.hpp"
#include "../zoomableimage.hpp"
#include "../zoomableimageoptpanel.hpp"
#include "../../util/util.hpp"
namespace cvv
{
namespace qtutil
{
namespace structures
{
/**
* @brief class for internal use in MatchScene
*/
class MatchSceneGraphicsView : public QGraphicsView
{
Q_OBJECT
public:
MatchSceneGraphicsView(QGraphicsScene *scene, QWidget *parent = nullptr)
: QGraphicsView{ scene, parent }
{
}
protected:
virtual void resizeEvent(QResizeEvent *event) override
{
QGraphicsView::resizeEvent(event);
emit signalResized();
}
virtual void contextMenuEvent(QContextMenuEvent *event)
{
emit signalContextMenu(event->globalPos());
//event->ignore();
}
signals:
void signalResized();
void signalContextMenu(const QPoint& );
};
}
/**
* @brief this scene shows two (zoomable)images with keypoints and matches.
*/
class MatchScene : public QGraphicsView
{
Q_OBJECT
public:
/**
* @brief the constructor
* @param imageLeft the left image
* @param imageRight the right iamge
* @param parent the parent Widget
*/
MatchScene(const cv::Mat& imageLeft,const cv::Mat& imageRight,
QWidget *parent = nullptr);
/**
* @brief returns the lett image.
*/
ZoomableImage& getLeftImage()
{return *leftImage_;}
/**
* @brief returns the right image.
*/
ZoomableImage& getRightImage()
{return *rightImage_;}
/**
* @brief returns a ZoomableOptPanel of the left Image
* @return a ZoomableOptPanel of the left Image
*/
std::unique_ptr<ZoomableOptPanel> getLeftMatInfoWidget()
{return util::make_unique<ZoomableOptPanel>(*leftImage_,false);}
/**
* @brief returns a ZoomableOptPanel of the right Image
* @return a ZoomableOptPanel of the right Image
*/
std::unique_ptr<ZoomableOptPanel> getRightMatInfoWidget()
{return util::make_unique<ZoomableOptPanel>(*rightImage_,false);}
/**
* @brief get SyncZoomWidget
* @return SyncZoomWidget for the images
*/
std::unique_ptr<SyncZoomWidget> getSyncZoomWidget();
/**
* @brief add keypoint to the left image.
*/
void addLeftKeypoint(std::unique_ptr<CVVKeyPoint>);
/**
* @brief add keypoint to the right image.
*/
void addRightKeyPoint(std::unique_ptr<CVVKeyPoint>);
/**
* @brief add Match.
*/
void addMatch(std::unique_ptr<CVVMatch>);
public slots:
/**
* @brief select all visible Items.
*/
void selectAllVisible();
private
slots:
/**
* @brief an slot which will be calles when the MatchSceneGraphicsView was resized.
*/
void viewReized();
/**
* @brief On right click a menu to save the current visible image or the zoomable images.
* @param pos The position of the right click.
*/
void rightClick(const QPoint &pos);
private:
structures::MatchSceneGraphicsView *graphicView_;
QGraphicsScene *graphicScene_;
qtutil::ZoomableImage *leftImage_;
qtutil::ZoomableImage *rightImage_;
structures::ZoomableProxyObject *leftImWidget_;
structures::ZoomableProxyObject *rightImWidget_;
};
}
}
#endif