Visual Servoing Platform  version 3.3.1 under development (2020-06-03)
vpDisplayOpenCV.h
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See http://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  * Description:
32  * Image display.
33  *
34  * Authors:
35  * Christophe Collewet
36  * Eric Marchand
37  *
38  *****************************************************************************/
39 
40 #ifndef vpDisplayOpenCV_h
41 #define vpDisplayOpenCV_h
42 
43 #include <visp3/core/vpConfig.h>
44 #if defined(VISP_HAVE_OPENCV)
45 
46 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
47 #include <functional>
48 #endif
49 
50 #include <visp3/core/vpDisplay.h>
51 #include <visp3/core/vpImage.h>
52 #include <visp3/core/vpImageConvert.h>
53 
54 #if VISP_HAVE_OPENCV_VERSION >= 0x020101
55 #include <opencv2/core/core.hpp>
56 #include <opencv2/highgui/highgui.hpp>
57 #else
58 #include <cv.h>
59 #include <cxcore.h>
60 #include <highgui.h>
61 #endif
62 
150 class VISP_EXPORT vpDisplayOpenCV : public vpDisplay
151 {
152 private:
153 #if (VISP_HAVE_OPENCV_VERSION < 0x020408)
154  IplImage *m_background;
156  CvScalar *col;
157  CvScalar cvcolor;
158  CvFont *font;
159 #else
160  cv::Mat m_background;
161  cv::Scalar *col;
162  cv::Scalar cvcolor;
163  int font;
164  float fontScale;
165 #endif
166  static std::vector<std::string> m_listTitles;
167  static unsigned int m_nbWindows;
168  int fontHeight;
169  int x_move;
170  int y_move;
171  bool move;
172  int x_lbuttondown;
173  int y_lbuttondown;
174  bool lbuttondown;
175  int x_mbuttondown;
176  int y_mbuttondown;
177  bool mbuttondown;
178  int x_rbuttondown;
179  int y_rbuttondown;
180  bool rbuttondown;
181  int x_lbuttonup;
182  int y_lbuttonup;
183  bool lbuttonup;
184  int x_mbuttonup;
185  int y_mbuttonup;
186  bool mbuttonup;
187  int x_rbuttonup;
188  int y_rbuttonup;
189  bool rbuttonup;
190 
191  // private:
192  //#ifndef DOXYGEN_SHOULD_SKIP_THIS
193  // vpDisplayOpenCV(const vpDisplayOpenCV &)
194  // : vpDisplay(),
195  // #if (VISP_HAVE_OPENCV_VERSION < 0x020408)
196  // background(NULL), col(NULL), cvcolor(), font(NULL),
197  // #else
198  // background(), col(NULL), cvcolor(), font(cv::FONT_HERSHEY_PLAIN),
199  // fontScale(0.8f),
200  // #endif
201  // fontHeight(10), x_move(0), y_move(0) , move(false),
202  // x_lbuttondown(0), y_lbuttondown(0), lbuttondown(false),
203  // x_mbuttondown(0), y_mbuttondown(0), mbuttondown(false),
204  // x_rbuttondown(0), y_rbuttondown(0), rbuttondown(false),
205  // x_lbuttonup(0), y_lbuttonup(0), lbuttonup(false),
206  // x_mbuttonup(0), y_mbuttonup(0), mbuttonup(false),
207  // x_rbuttonup(0), y_rbuttonup(0), rbuttonup(false)
208  // {
209  // throw vpException(vpException::functionNotImplementedError, "Not
210  // implemented!");
211  // }
212  // vpDisplayOpenCV &operator=(const vpDisplayOpenCV &){
213  // throw vpException(vpException::functionNotImplementedError, "Not
214  // implemented!"); return *this;
215  // }
216  //#endif
217 
218 public:
219  vpDisplayOpenCV();
220  vpDisplayOpenCV(int winx, int winy, const std::string &title = "");
222  vpDisplayOpenCV(vpImage<unsigned char> &I, int winx = -1, int winy = -1, const std::string &title = "",
223  vpScaleType type = SCALE_DEFAULT);
225  vpDisplayOpenCV(vpImage<vpRGBa> &I, int winx = -1, int winy = -1, const std::string &title = "",
226  vpScaleType type = SCALE_DEFAULT);
227 
228  virtual ~vpDisplayOpenCV();
229 
230  void getImage(vpImage<vpRGBa> &I);
231  unsigned int getScreenHeight();
232  void getScreenSize(unsigned int &width, unsigned int &height);
233  unsigned int getScreenWidth();
234 
235  void init(vpImage<unsigned char> &I, int winx = -1, int winy = -1, const std::string &title = "");
236  void init(vpImage<vpRGBa> &I, int winx = -1, int winy = -1, const std::string &title = "");
237  void init(unsigned int width, unsigned int height, int winx = -1, int winy = -1, const std::string &title = "");
238 
239 protected:
240  void setFont(const std::string &font);
241  void setTitle(const std::string &title);
242  void setWindowPosition(int winx, int winy);
243 
244  void clearDisplay(const vpColor &color = vpColor::white);
245 
246  void closeDisplay();
247 
248  void displayArrow(const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color = vpColor::white,
249  unsigned int w = 4, unsigned int h = 2, unsigned int thickness = 1);
250 
251  void displayCharString(const vpImagePoint &ip, const char *text, const vpColor &color = vpColor::green);
252 
253  void displayCircle(const vpImagePoint &center, unsigned int radius, const vpColor &color, bool fill = false,
254  unsigned int thickness = 1);
255  void displayCross(const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness = 1);
256  void displayDotLine(const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color,
257  unsigned int thickness = 1);
258 
259  void displayImage(const vpImage<unsigned char> &I);
260  void displayImage(const vpImage<vpRGBa> &I);
261  void displayImage(const unsigned char *I);
262 
263  void displayImageROI(const vpImage<unsigned char> &I, const vpImagePoint &iP, unsigned int width,
264  unsigned int height);
265  void displayImageROI(const vpImage<vpRGBa> &I, const vpImagePoint &iP, unsigned int width,
266  unsigned int height);
267 
268  void displayLine(const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness = 1);
269  void displayPoint(const vpImagePoint &ip, const vpColor &color, unsigned int thickness = 1);
270 
271  void displayRectangle(const vpImagePoint &topLeft, unsigned int width, unsigned int height, const vpColor &color,
272  bool fill = false, unsigned int thickness = 1);
273  void displayRectangle(const vpImagePoint &topLeft, const vpImagePoint &bottomRight, const vpColor &color,
274  bool fill = false, unsigned int thickness = 1);
275  void displayRectangle(const vpRect &rectangle, const vpColor &color, bool fill = false, unsigned int thickness = 1);
276 
277  void flushDisplay();
278  void flushDisplayROI(const vpImagePoint &iP, unsigned int width, unsigned int height);
279 
280  bool getClick(bool blocking = true);
281  bool getClick(vpImagePoint &ip, bool blocking = true);
282  bool getClick(vpImagePoint &ip, vpMouseButton::vpMouseButtonType &button, bool blocking = true);
283  bool getClickUp(vpImagePoint &ip, vpMouseButton::vpMouseButtonType &button, bool blocking = true);
284 
285  bool getKeyboardEvent(bool blocking = true);
286  bool getKeyboardEvent(std::string &key, bool blocking = true);
289 
290  static void on_mouse(int event, int x, int y, int flags, void *param);
291 
292 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
293  void overlay(std::function<void(cv::Mat&)> overlay_function, double opacity);
294 #endif
295 };
296 
297 #endif
298 #endif
Class that defines generic functionnalities for display.
Definition: vpDisplay.h:177
static bool getPointerPosition(const vpImage< unsigned char > &I, vpImagePoint &ip)
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
static bool getPointerMotionEvent(const vpImage< unsigned char > &I, vpImagePoint &ip)
Class to define RGB colors available for display functionnalities.
Definition: vpColor.h:157
static bool getClickUp(const vpImage< unsigned char > &I, vpImagePoint &ip, vpMouseButton::vpMouseButtonType &button, bool blocking=true)
static void displayPoint(const vpImage< unsigned char > &I, const vpImagePoint &ip, const vpColor &color, unsigned int thickness=1)
static const vpColor green
Definition: vpColor.h:220
static void setFont(const vpImage< unsigned char > &I, const std::string &font)
static void displayArrow(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color=vpColor::white, unsigned int w=4, unsigned int h=2, unsigned int thickness=1)
The vpDisplayOpenCV allows to display image using the OpenCV library. Thus to enable this class OpenC...
static void displayRectangle(const vpImage< unsigned char > &I, const vpImagePoint &topLeft, unsigned int width, unsigned int height, const vpColor &color, bool fill=false, unsigned int thickness=1)
static void getImage(const vpImage< unsigned char > &Is, vpImage< vpRGBa > &Id)
Definition: vpDisplay.cpp:144
static void displayCircle(const vpImage< unsigned char > &I, const vpImagePoint &center, unsigned int radius, const vpColor &color, bool fill=false, unsigned int thickness=1)
static void displayCross(const vpImage< unsigned char > &I, const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness=1)
static void setWindowPosition(const vpImage< unsigned char > &I, int winx, int winy)
Defines a rectangle in the plane.
Definition: vpRect.h:79
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition: vpImagePoint.h:87
static bool getKeyboardEvent(const vpImage< unsigned char > &I, bool blocking=true)
static void displayCharString(const vpImage< unsigned char > &I, const vpImagePoint &ip, const char *string, const vpColor &color)
static void setTitle(const vpImage< unsigned char > &I, const std::string &windowtitle)
static const vpColor white
Definition: vpColor.h:212
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1, bool segment=true)
static void displayDotLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1)