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