Visual Servoing Platform version 3.5.0
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
150class VISP_EXPORT vpDisplayOpenCV : public vpDisplay
151{
152private:
153#if (VISP_HAVE_OPENCV_VERSION < 0x020408)
155 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
218public:
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
239protected:
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 to define RGB colors available for display functionnalities.
Definition: vpColor.h:158
static const vpColor white
Definition: vpColor.h:212
static const vpColor green
Definition: vpColor.h:220
The vpDisplayOpenCV allows to display image using the OpenCV library. Thus to enable this class OpenC...
Class that defines generic functionnalities for display.
Definition: vpDisplay.h:178
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
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:144
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 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 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 displayCircle(const vpImage< unsigned char > &I, const vpImagePoint &center, unsigned int radius, const vpColor &color, bool fill=false, unsigned int thickness=1)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition: vpImagePoint.h:88
Defines a rectangle in the plane.
Definition: vpRect.h:80