MRPT  2.0.4
CDisplayWindow.h
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | https://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2020, Individual contributors, see AUTHORS file |
6  | See: https://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See: https://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 #pragma once
10 
12 #include <mrpt/img/CImage.h>
14 #include <mrpt/system/os.h>
15 #include <vector>
16 
17 namespace mrpt
18 {
19 /** Classes for creating GUI windows for 2D and 3D visualization. \ingroup
20  * mrpt_gui_grp */
21 namespace gui
22 {
23 /** This class creates a window as a graphical user interface (GUI) for
24  * displaying images to the user.
25  *
26  * For a list of supported events with the observer/observable pattern, see the
27  * discussion in mrpt::gui::CBaseGUIWindow.
28  *
29  * ![mrpt::gui::CDisplayWindow screenshot](preview_CDisplayWindow.jpg)
30  *
31  * \ingroup mrpt_gui_grp
32  */
34 {
35  public:
36  using Ptr = std::shared_ptr<CDisplayWindow>;
37  using ConstPtr = std::shared_ptr<const CDisplayWindow>;
38 
39  protected:
40  /** Enables or disables the visualization of cursor coordinates on the
41  * window caption.
42  */
44 
45  public:
46  /** Constructor
47  */
49  const std::string& windowCaption = std::string(),
50  unsigned int initWidth = 400, unsigned int initHeight = 400);
51 
52  /** Class factory returning a smart pointer */
54  const std::string& windowCaption, unsigned int initWidth = 400,
55  unsigned int initHeight = 400);
56 
57  /** Destructor
58  */
59  ~CDisplayWindow() override;
60 
61  /** Gets the last x,y pixel coordinates of the mouse. \return False if the
62  * window is closed. */
63  bool getLastMousePosition(int& x, int& y) const override;
64 
65  /** Set cursor style to default (cursorIsCross=false) or to a cross
66  * (cursorIsCross=true) */
67  void setCursorCross(bool cursorIsCross) override;
68 
69  /** Show a given color or grayscale image on the window and print a set of
70  * points on it.
71  * It adapts the size of the window to that of the image.
72  */
73  void showImageAndPoints(
74  const mrpt::img::CImage& img, const mrpt::math::CVectorFloat& x,
75  const mrpt::math::CVectorFloat& y,
77  bool showNumbers = false);
78  /** \overload */
79  void showImageAndPoints(
80  const mrpt::img::CImage& img, const std::vector<float>& x,
81  const std::vector<float>& y,
83  bool showNumbers = false);
84 
85  /** Show a given color or grayscale image on the window and print a set of
86  * points on it.
87  * It adapts the size of the window to that of the image.
88  * The class of FEATURELIST can be: mrpt::vision::CFeatureList or any STL
89  * container of entities having "x","y" and "ID" fields.
90  */
91  template <class FEATURELIST>
93  const mrpt::img::CImage& img, const FEATURELIST& list,
95  bool showIDs = false)
96  {
98  mrpt::img::CImage imgColor = img.colorImage();
99  imgColor.drawFeatures(list, color, showIDs);
100  showImage(imgColor);
101  MRPT_END
102  }
103 
104  /** Show a given color or grayscale image on the window and print a set of
105  * points on it and a set of lines splitting the image in tiles.
106  * It adapts the size of the window to that of the image.
107  * The class of FEATURELIST can be: mrpt::vision::CFeatureList
108  */
109  template <class FEATURELIST>
111  const mrpt::img::CImage& img, const FEATURELIST& list,
112  const mrpt::img::TColor& color = mrpt::img::TColor::red())
113  {
114  MRPT_START
115  using mrpt::img::TColor;
116  mrpt::img::CImage imgColor = img.colorImage();
117 
118  // Print the 4 tile lines
119  unsigned int w = imgColor.getWidth();
120  unsigned int h = imgColor.getHeight();
121  imgColor.line(0, h / 2, w - 1, h / 2, TColor::green());
122  imgColor.line(w / 4, 0, w / 4, h, TColor::green());
123  imgColor.line(w / 2, 0, w / 2, h, TColor::green());
124  imgColor.line(3 * w / 4, 0, 3 * w / 4, h, TColor::green());
125 
126  showImageAndPoints(imgColor, list, color);
127 
128  MRPT_END
129  }
130 
131  /** Show a pair of given color or grayscale images (put together) on the
132  * window and print a set of matches on them.
133  * It adapts the size of the window to that of the image.
134  * MATCHEDLIST can be of the class: mrpt::vision::CMatchedFeatureList, or
135  * any STL container of pairs of anything having ".x" and ".y" (e.g.
136  * mrpt::math::TPoint2D)
137  */
138  template <class MATCHEDLIST>
140  const mrpt::img::CImage& img1, const mrpt::img::CImage& img2,
141  const MATCHEDLIST& mList,
142  const mrpt::img::TColor& color = mrpt::img::TColor::red(),
143  bool showNumbers = false)
144  {
145  MRPT_START
146 
147  mrpt::img::CImage imgColor;
148 
149  // img1.colorImage( imgColor ); // Create a colorimage
150  imgColor.joinImagesHorz(img1, img2);
151 
152  unsigned int w = img1.getWidth();
153  unsigned int nf = 0;
154 
155  for (typename MATCHEDLIST::const_iterator i = mList.begin();
156  i != mList.end(); ++i, ++nf)
157  {
158  const auto x1 = round(i->first.keypoint.pt.x);
159  const auto y1 = round(i->first.keypoint.pt.y);
160  const auto x2 = round(i->second.keypoint.pt.x);
161  const auto y2 = round(i->second.keypoint.pt.y);
162 
163  imgColor.drawCircle(x1, y1, 4, color);
164  imgColor.drawCircle(x2 + w, y2, 4, color);
165 
166  if (showNumbers)
167  {
168  char buf[15];
170  buf, 15, "%d[%u]", nf, (unsigned int)i->first.keypoint.ID);
171  imgColor.textOut(x1 - 10, y1, buf, color);
173  buf, 15, "%d[%u]", nf, (unsigned int)i->second.keypoint.ID);
174  imgColor.textOut(x2 + w + 10, y2, buf, color);
175  }
176  }
177  showImage(imgColor);
178 
179  MRPT_END
180  }
181 
182  /** Show a pair of given color or grayscale images (put together) on the
183  * window and print a set of matches on them.
184  * It adapts the size of the window to that of the image.
185  * FEATURELIST can be of the class: mrpt::vision::CFeatureList
186  */
187  template <class FEATURELIST>
189  const mrpt::img::CImage& img1, const mrpt::img::CImage& img2,
190  const FEATURELIST& leftList, const FEATURELIST& rightList,
191  const mrpt::img::TColor& color = mrpt::img::TColor::red())
192  {
193  MRPT_START
194 
195  mrpt::img::CImage imgColor;
196 
197  // img1.colorImage( imgColor ); // Create a colorimage
198  ASSERT_(leftList.size() == rightList.size());
199  imgColor.joinImagesHorz(img1, img2);
200 
201  unsigned int w = img1.getWidth();
202 
203  for (typename FEATURELIST::const_iterator iL = leftList.begin(),
204  iR = rightList.begin();
205  iL != leftList.end(); ++iL, ++iR)
206  {
207  imgColor.drawCircle(round((*iL)->x), round((*iL)->y), 4, color);
208  imgColor.drawCircle(round((*iR)->x + w), round((*iR)->y), 4, color);
209  imgColor.line(
210  round((*iL)->x), round((*iL)->y), round((*iR)->x + w),
211  round((*iR)->y), color);
212  }
213  showImage(imgColor);
214 
215  MRPT_END
216  }
217 
218  /** Show a given color or grayscale image on the window.
219  * It adapts the size of the window to that of the image.
220  */
221  void showImage(const mrpt::img::CImage& img);
222 
223  /** Plots a graph in MATLAB-like style.
224  */
225  void plot(
227 
228  /** Plots a graph in MATLAB-like style.
229  */
230  void plot(const mrpt::math::CVectorFloat& y);
231 
232  /** Resizes the window, stretching the image to fit into the display area.
233  */
234  void resize(unsigned int width, unsigned int height) override;
235 
236  /** Changes the position of the window on the screen.
237  */
238  void setPos(int x, int y) override;
239 
240  /** Enables or disables the visualization of cursor coordinates on the
241  * window caption (default = enabled).
242  */
243  inline void enableCursorCoordinatesVisualization(bool enable)
244  {
245  m_enableCursorCoordinates = enable;
246  }
247 
248  /** Changes the window title text.
249  */
250  void setWindowTitle(const std::string& str) override;
251 
252 }; // End of class def.
253 
254 } // namespace gui
255 
256 } // namespace mrpt
mrpt::gui::CDisplayWindow::showImageAndPoints
void showImageAndPoints(const mrpt::img::CImage &img, const mrpt::math::CVectorFloat &x, const mrpt::math::CVectorFloat &y, const mrpt::img::TColor &color=mrpt::img::TColor::red(), bool showNumbers=false)
Show a given color or grayscale image on the window and print a set of points on it.
Definition: CDisplayWindow.cpp:387
os.h
mrpt::img::CImage::getWidth
size_t getWidth() const override
Returns the width of the image in pixels.
Definition: CImage.cpp:818
mrpt::gui::CDisplayWindow::showTiledImageAndPoints
void showTiledImageAndPoints(const mrpt::img::CImage &img, const FEATURELIST &list, const mrpt::img::TColor &color=mrpt::img::TColor::red())
Show a given color or grayscale image on the window and print a set of points on it and a set of line...
Definition: CDisplayWindow.h:110
mrpt::img::TColor::red
static constexpr TColor red()
Predefined colors.
Definition: TColor.h:66
mrpt::gui::CDisplayWindow::resize
void resize(unsigned int width, unsigned int height) override
Resizes the window, stretching the image to fit into the display area.
Definition: CDisplayWindow.cpp:531
mrpt::gui::CDisplayWindow::ConstPtr
std::shared_ptr< const CDisplayWindow > ConstPtr
Definition: CDisplayWindow.h:37
mrpt::img::CCanvas::drawFeatures
void drawFeatures(const FEATURELIST &list, const TColor &color=TColor::red(), const bool showIDs=false, const bool showResponse=false, const bool showScale=false, const char marker='+')
Draws a set of marks (or scaled circles for features with scale) onto the image, given a generic cont...
Definition: CCanvas.h:280
mrpt::gui::CDisplayWindow::setPos
void setPos(int x, int y) override
Changes the position of the window on the screen.
Definition: CDisplayWindow.cpp:555
mrpt
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
Definition: BaseAppDataSource.h:15
mrpt::gui::CDisplayWindow::~CDisplayWindow
~CDisplayWindow() override
Destructor.
Definition: CDisplayWindow.cpp:331
ASSERT_
#define ASSERT_(f)
Defines an assertion mechanism.
Definition: exceptions.h:120
mrpt::gui::CDisplayWindow::setCursorCross
void setCursorCross(bool cursorIsCross) override
Set cursor style to default (cursorIsCross=false) or to a cross (cursorIsCross=true)
Definition: CDisplayWindow.cpp:334
mrpt::gui::CDisplayWindow::Create
static CDisplayWindow::Ptr Create(const std::string &windowCaption, unsigned int initWidth=400, unsigned int initHeight=400)
Class factory returning a smart pointer.
Definition: CDisplayWindow.cpp:309
mrpt::gui::CDisplayWindow::showImage
void showImage(const mrpt::img::CImage &img)
Show a given color or grayscale image on the window.
Definition: CDisplayWindow.cpp:364
mrpt::gui::CDisplayWindow::plot
void plot(const mrpt::math::CVectorFloat &x, const mrpt::math::CVectorFloat &y)
Plots a graph in MATLAB-like style.
Definition: CDisplayWindow.cpp:427
mrpt::gui::CDisplayWindow::showImagesAndMatchedPoints
void showImagesAndMatchedPoints(const mrpt::img::CImage &img1, const mrpt::img::CImage &img2, const MATCHEDLIST &mList, const mrpt::img::TColor &color=mrpt::img::TColor::red(), bool showNumbers=false)
Show a pair of given color or grayscale images (put together) on the window and print a set of matche...
Definition: CDisplayWindow.h:139
mrpt::system::os::sprintf
int sprintf(char *buf, size_t bufSize, const char *format,...) noexcept MRPT_printf_format_check(3
An OS-independent version of sprintf (Notice the bufSize param, which may be ignored in some compiler...
mrpt::gui::CDisplayWindow::Ptr
std::shared_ptr< CDisplayWindow > Ptr
Definition: CDisplayWindow.h:36
CVectorDynamic.h
mrpt::gui::CBaseGUIWindow
The base class for GUI window classes based on wxWidgets.
Definition: CBaseGUIWindow.h:40
mrpt::gui::CDisplayWindow::showImageAndPoints
void showImageAndPoints(const mrpt::img::CImage &img, const FEATURELIST &list, const mrpt::img::TColor &color=mrpt::img::TColor::red(), bool showIDs=false)
Show a given color or grayscale image on the window and print a set of points on it.
Definition: CDisplayWindow.h:92
mrpt::round
int round(const T value)
Returns the closer integer (int) to x.
Definition: round.h:24
MRPT_START
#define MRPT_START
Definition: exceptions.h:241
mrpt::gui::CDisplayWindow::m_enableCursorCoordinates
bool m_enableCursorCoordinates
Enables or disables the visualization of cursor coordinates on the window caption.
Definition: CDisplayWindow.h:43
mrpt::img::CImage::line
void line(int x0, int y0, int x1, int y1, const mrpt::img::TColor color, unsigned int width=1, TPenStyle penStyle=psSolid) override
Draws a line.
Definition: CImage.cpp:1123
mrpt::img::TColor
A RGB color - 8bit.
Definition: TColor.h:25
mrpt::img::CImage::colorImage
CImage colorImage() const
Returns a color (RGB) version of the grayscale image, or a shallow copy of itself if it is already a ...
Definition: CImage.cpp:1867
mrpt::img::CImage::joinImagesHorz
void joinImagesHorz(const CImage &im1, const CImage &im2)
Joins two images side-by-side horizontally.
Definition: CImage.cpp:1893
mrpt::gui::CDisplayWindow
This class creates a window as a graphical user interface (GUI) for displaying images to the user.
Definition: CDisplayWindow.h:33
mrpt::math::CVectorDynamic
Template for column vectors of dynamic size, compatible with Eigen.
Definition: CVectorDynamic.h:31
mrpt::img::CImage
A class for storing images as grayscale or RGB bitmaps.
Definition: img/CImage.h:148
mrpt::img::CImage::getHeight
size_t getHeight() const override
Returns the height of the image in pixels.
Definition: CImage.cpp:855
mrpt::gui::CDisplayWindow::showImagesAndMatchedPoints
void showImagesAndMatchedPoints(const mrpt::img::CImage &img1, const mrpt::img::CImage &img2, const FEATURELIST &leftList, const FEATURELIST &rightList, const mrpt::img::TColor &color=mrpt::img::TColor::red())
Show a pair of given color or grayscale images (put together) on the window and print a set of matche...
Definition: CDisplayWindow.h:188
MRPT_END
#define MRPT_END
Definition: exceptions.h:245
CBaseGUIWindow.h
mrpt::gui::CDisplayWindow::setWindowTitle
void setWindowTitle(const std::string &str) override
Changes the window title text.
Definition: CDisplayWindow.cpp:578
CImage.h
mrpt::gui::CDisplayWindow::enableCursorCoordinatesVisualization
void enableCursorCoordinatesVisualization(bool enable)
Enables or disables the visualization of cursor coordinates on the window caption (default = enabled)...
Definition: CDisplayWindow.h:243
mrpt::gui::CDisplayWindow::getLastMousePosition
bool getLastMousePosition(int &x, int &y) const override
Gets the last x,y pixel coordinates of the mouse.
Definition: CDisplayWindow.cpp:347
mrpt::gui::CDisplayWindow::CDisplayWindow
CDisplayWindow(const std::string &windowCaption=std::string(), unsigned int initWidth=400, unsigned int initHeight=400)
Constructor.
Definition: CDisplayWindow.cpp:319



Page generated by Doxygen 1.8.17 for MRPT 2.0.4 at Sun Jul 19 15:15:43 UTC 2020