github.com/kaydxh/golang@v0.0.131/pkg/gocv/cgo/third_path/opencv4/include/opencv2/highgui.hpp (about)

     1  /*M///////////////////////////////////////////////////////////////////////////////////////
     2  //
     3  //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
     4  //
     5  //  By downloading, copying, installing or using the software you agree to this license.
     6  //  If you do not agree to this license, do not download, install,
     7  //  copy or use the software.
     8  //
     9  //
    10  //                          License Agreement
    11  //                For Open Source Computer Vision Library
    12  //
    13  // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
    14  // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
    15  // Third party copyrights are property of their respective owners.
    16  //
    17  // Redistribution and use in source and binary forms, with or without modification,
    18  // are permitted provided that the following conditions are met:
    19  //
    20  //   * Redistribution's of source code must retain the above copyright notice,
    21  //     this list of conditions and the following disclaimer.
    22  //
    23  //   * Redistribution's in binary form must reproduce the above copyright notice,
    24  //     this list of conditions and the following disclaimer in the documentation
    25  //     and/or other materials provided with the distribution.
    26  //
    27  //   * The name of the copyright holders may not be used to endorse or promote products
    28  //     derived from this software without specific prior written permission.
    29  //
    30  // This software is provided by the copyright holders and contributors "as is" and
    31  // any express or implied warranties, including, but not limited to, the implied
    32  // warranties of merchantability and fitness for a particular purpose are disclaimed.
    33  // In no event shall the Intel Corporation or contributors be liable for any direct,
    34  // indirect, incidental, special, exemplary, or consequential damages
    35  // (including, but not limited to, procurement of substitute goods or services;
    36  // loss of use, data, or profits; or business interruption) however caused
    37  // and on any theory of liability, whether in contract, strict liability,
    38  // or tort (including negligence or otherwise) arising in any way out of
    39  // the use of this software, even if advised of the possibility of such damage.
    40  //
    41  //M*/
    42  
    43  #ifndef OPENCV_HIGHGUI_HPP
    44  #define OPENCV_HIGHGUI_HPP
    45  
    46  #include "opencv2/core.hpp"
    47  #ifdef HAVE_OPENCV_IMGCODECS
    48  #include "opencv2/imgcodecs.hpp"
    49  #endif
    50  #ifdef HAVE_OPENCV_VIDEOIO
    51  #include "opencv2/videoio.hpp"
    52  #endif
    53  
    54  /**
    55  @defgroup highgui High-level GUI
    56  
    57  While OpenCV was designed for use in full-scale applications and can be used within functionally
    58  rich UI frameworks (such as Qt\*, WinForms\*, or Cocoa\*) or without any UI at all, sometimes there
    59  it is required to try functionality quickly and visualize the results. This is what the HighGUI
    60  module has been designed for.
    61  
    62  It provides easy interface to:
    63  
    64  -   Create and manipulate windows that can display images and "remember" their content (no need to
    65      handle repaint events from OS).
    66  -   Add trackbars to the windows, handle simple mouse events as well as keyboard commands.
    67  
    68  @{
    69      @defgroup highgui_window_flags Flags related creating and manipulating HighGUI windows and mouse events
    70      @defgroup highgui_opengl OpenGL support
    71      @defgroup highgui_qt Qt New Functions
    72  
    73      ![image](pics/qtgui.png)
    74  
    75      This figure explains new functionality implemented with Qt\* GUI. The new GUI provides a statusbar,
    76      a toolbar, and a control panel. The control panel can have trackbars and buttonbars attached to it.
    77      If you cannot see the control panel, press Ctrl+P or right-click any Qt window and select **Display
    78      properties window**.
    79  
    80      -   To attach a trackbar, the window name parameter must be NULL.
    81  
    82      -   To attach a buttonbar, a button must be created. If the last bar attached to the control panel
    83          is a buttonbar, the new button is added to the right of the last button. If the last bar
    84          attached to the control panel is a trackbar, or the control panel is empty, a new buttonbar is
    85          created. Then, a new button is attached to it.
    86  
    87      See below the example used to generate the figure:
    88      @code
    89          int main(int argc, char *argv[])
    90          {
    91  
    92              int value = 50;
    93              int value2 = 0;
    94  
    95  
    96              namedWindow("main1",WINDOW_NORMAL);
    97              namedWindow("main2",WINDOW_AUTOSIZE | WINDOW_GUI_NORMAL);
    98              createTrackbar( "track1", "main1", &value, 255,  NULL);
    99  
   100              String nameb1 = "button1";
   101              String nameb2 = "button2";
   102  
   103              createButton(nameb1,callbackButton,&nameb1,QT_CHECKBOX,1);
   104              createButton(nameb2,callbackButton,NULL,QT_CHECKBOX,0);
   105              createTrackbar( "track2", NULL, &value2, 255, NULL);
   106              createButton("button5",callbackButton1,NULL,QT_RADIOBOX,0);
   107              createButton("button6",callbackButton2,NULL,QT_RADIOBOX,1);
   108  
   109              setMouseCallback( "main2",on_mouse,NULL );
   110  
   111              Mat img1 = imread("files/flower.jpg");
   112              VideoCapture video;
   113              video.open("files/hockey.avi");
   114  
   115              Mat img2,img3;
   116  
   117              while( waitKey(33) != 27 )
   118              {
   119                  img1.convertTo(img2,-1,1,value);
   120                  video >> img3;
   121  
   122                  imshow("main1",img2);
   123                  imshow("main2",img3);
   124              }
   125  
   126              destroyAllWindows();
   127  
   128              return 0;
   129          }
   130      @endcode
   131  
   132  
   133      @defgroup highgui_winrt WinRT support
   134  
   135      This figure explains new functionality implemented with WinRT GUI. The new GUI provides an Image control,
   136      and a slider panel. Slider panel holds trackbars attached to it.
   137  
   138      Sliders are attached below the image control. Every new slider is added below the previous one.
   139  
   140      See below the example used to generate the figure:
   141      @code
   142          void sample_app::MainPage::ShowWindow()
   143          {
   144              static cv::String windowName("sample");
   145              cv::winrt_initContainer(this->cvContainer);
   146              cv::namedWindow(windowName); // not required
   147  
   148              cv::Mat image = cv::imread("Assets/sample.jpg");
   149              cv::Mat converted = cv::Mat(image.rows, image.cols, CV_8UC4);
   150              cv::cvtColor(image, converted, COLOR_BGR2BGRA);
   151              cv::imshow(windowName, converted); // this will create window if it hasn't been created before
   152  
   153              int state = 42;
   154              cv::TrackbarCallback callback = [](int pos, void* userdata)
   155              {
   156                  if (pos == 0) {
   157                      cv::destroyWindow(windowName);
   158                  }
   159              };
   160              cv::TrackbarCallback callbackTwin = [](int pos, void* userdata)
   161              {
   162                  if (pos >= 70) {
   163                      cv::destroyAllWindows();
   164                  }
   165              };
   166              cv::createTrackbar("Sample trackbar", windowName, &state, 100, callback);
   167              cv::createTrackbar("Twin brother", windowName, &state, 100, callbackTwin);
   168          }
   169      @endcode
   170  
   171      @defgroup highgui_c C API
   172  @}
   173  */
   174  
   175  ///////////////////////// graphical user interface //////////////////////////
   176  namespace cv
   177  {
   178  
   179  //! @addtogroup highgui
   180  //! @{
   181  
   182  //! @addtogroup highgui_window_flags
   183  //! @{
   184  
   185  //! Flags for cv::namedWindow
   186  enum WindowFlags {
   187         WINDOW_NORMAL     = 0x00000000, //!< the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size.
   188         WINDOW_AUTOSIZE   = 0x00000001, //!< the user cannot resize the window, the size is constrainted by the image displayed.
   189         WINDOW_OPENGL     = 0x00001000, //!< window with opengl support.
   190  
   191         WINDOW_FULLSCREEN = 1,          //!< change the window to fullscreen.
   192         WINDOW_FREERATIO  = 0x00000100, //!< the image expends as much as it can (no ratio constraint).
   193         WINDOW_KEEPRATIO  = 0x00000000, //!< the ratio of the image is respected.
   194         WINDOW_GUI_EXPANDED=0x00000000, //!< status bar and tool bar
   195         WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way
   196      };
   197  
   198  //! Flags for cv::setWindowProperty / cv::getWindowProperty
   199  enum WindowPropertyFlags {
   200         WND_PROP_FULLSCREEN   = 0, //!< fullscreen property    (can be WINDOW_NORMAL or WINDOW_FULLSCREEN).
   201         WND_PROP_AUTOSIZE     = 1, //!< autosize property      (can be WINDOW_NORMAL or WINDOW_AUTOSIZE).
   202         WND_PROP_ASPECT_RATIO = 2, //!< window's aspect ration (can be set to WINDOW_FREERATIO or WINDOW_KEEPRATIO).
   203         WND_PROP_OPENGL       = 3, //!< opengl support.
   204         WND_PROP_VISIBLE      = 4, //!< checks whether the window exists and is visible
   205         WND_PROP_TOPMOST      = 5, //!< property to toggle normal window being topmost or not
   206         WND_PROP_VSYNC        = 6  //!< enable or disable VSYNC (in OpenGL mode)
   207       };
   208  
   209  //! Mouse Events see cv::MouseCallback
   210  enum MouseEventTypes {
   211         EVENT_MOUSEMOVE      = 0, //!< indicates that the mouse pointer has moved over the window.
   212         EVENT_LBUTTONDOWN    = 1, //!< indicates that the left mouse button is pressed.
   213         EVENT_RBUTTONDOWN    = 2, //!< indicates that the right mouse button is pressed.
   214         EVENT_MBUTTONDOWN    = 3, //!< indicates that the middle mouse button is pressed.
   215         EVENT_LBUTTONUP      = 4, //!< indicates that left mouse button is released.
   216         EVENT_RBUTTONUP      = 5, //!< indicates that right mouse button is released.
   217         EVENT_MBUTTONUP      = 6, //!< indicates that middle mouse button is released.
   218         EVENT_LBUTTONDBLCLK  = 7, //!< indicates that left mouse button is double clicked.
   219         EVENT_RBUTTONDBLCLK  = 8, //!< indicates that right mouse button is double clicked.
   220         EVENT_MBUTTONDBLCLK  = 9, //!< indicates that middle mouse button is double clicked.
   221         EVENT_MOUSEWHEEL     = 10,//!< positive and negative values mean forward and backward scrolling, respectively.
   222         EVENT_MOUSEHWHEEL    = 11 //!< positive and negative values mean right and left scrolling, respectively.
   223       };
   224  
   225  //! Mouse Event Flags see cv::MouseCallback
   226  enum MouseEventFlags {
   227         EVENT_FLAG_LBUTTON   = 1, //!< indicates that the left mouse button is down.
   228         EVENT_FLAG_RBUTTON   = 2, //!< indicates that the right mouse button is down.
   229         EVENT_FLAG_MBUTTON   = 4, //!< indicates that the middle mouse button is down.
   230         EVENT_FLAG_CTRLKEY   = 8, //!< indicates that CTRL Key is pressed.
   231         EVENT_FLAG_SHIFTKEY  = 16,//!< indicates that SHIFT Key is pressed.
   232         EVENT_FLAG_ALTKEY    = 32 //!< indicates that ALT Key is pressed.
   233       };
   234  
   235  //! @} highgui_window_flags
   236  
   237  //! @addtogroup highgui_qt
   238  //! @{
   239  
   240  //! Qt font weight
   241  enum QtFontWeights {
   242          QT_FONT_LIGHT           = 25, //!< Weight of 25
   243          QT_FONT_NORMAL          = 50, //!< Weight of 50
   244          QT_FONT_DEMIBOLD        = 63, //!< Weight of 63
   245          QT_FONT_BOLD            = 75, //!< Weight of 75
   246          QT_FONT_BLACK           = 87  //!< Weight of 87
   247       };
   248  
   249  //! Qt font style
   250  enum QtFontStyles {
   251          QT_STYLE_NORMAL         = 0, //!< Normal font.
   252          QT_STYLE_ITALIC         = 1, //!< Italic font.
   253          QT_STYLE_OBLIQUE        = 2  //!< Oblique font.
   254       };
   255  
   256  //! Qt "button" type
   257  enum QtButtonTypes {
   258         QT_PUSH_BUTTON   = 0,    //!< Push button.
   259         QT_CHECKBOX      = 1,    //!< Checkbox button.
   260         QT_RADIOBOX      = 2,    //!< Radiobox button.
   261         QT_NEW_BUTTONBAR = 1024  //!< Button should create a new buttonbar
   262       };
   263  
   264  //! @} highgui_qt
   265  
   266  /** @brief Callback function for mouse events. see cv::setMouseCallback
   267  @param event one of the cv::MouseEventTypes constants.
   268  @param x The x-coordinate of the mouse event.
   269  @param y The y-coordinate of the mouse event.
   270  @param flags one of the cv::MouseEventFlags constants.
   271  @param userdata The optional parameter.
   272   */
   273  typedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata);
   274  
   275  /** @brief Callback function for Trackbar see cv::createTrackbar
   276  @param pos current position of the specified trackbar.
   277  @param userdata The optional parameter.
   278   */
   279  typedef void (*TrackbarCallback)(int pos, void* userdata);
   280  
   281  /** @brief Callback function defined to be called every frame. See cv::setOpenGlDrawCallback
   282  @param userdata The optional parameter.
   283   */
   284  typedef void (*OpenGlDrawCallback)(void* userdata);
   285  
   286  /** @brief Callback function for a button created by cv::createButton
   287  @param state current state of the button. It could be -1 for a push button, 0 or 1 for a check/radio box button.
   288  @param userdata The optional parameter.
   289   */
   290  typedef void (*ButtonCallback)(int state, void* userdata);
   291  
   292  /** @brief Creates a window.
   293  
   294  The function namedWindow creates a window that can be used as a placeholder for images and
   295  trackbars. Created windows are referred to by their names.
   296  
   297  If a window with the same name already exists, the function does nothing.
   298  
   299  You can call cv::destroyWindow or cv::destroyAllWindows to close the window and de-allocate any associated
   300  memory usage. For a simple program, you do not really have to call these functions because all the
   301  resources and windows of the application are closed automatically by the operating system upon exit.
   302  
   303  @note
   304  
   305  Qt backend supports additional flags:
   306   -   **WINDOW_NORMAL or WINDOW_AUTOSIZE:** WINDOW_NORMAL enables you to resize the
   307       window, whereas WINDOW_AUTOSIZE adjusts automatically the window size to fit the
   308       displayed image (see imshow ), and you cannot change the window size manually.
   309   -   **WINDOW_FREERATIO or WINDOW_KEEPRATIO:** WINDOW_FREERATIO adjusts the image
   310       with no respect to its ratio, whereas WINDOW_KEEPRATIO keeps the image ratio.
   311   -   **WINDOW_GUI_NORMAL or WINDOW_GUI_EXPANDED:** WINDOW_GUI_NORMAL is the old way to draw the window
   312       without statusbar and toolbar, whereas WINDOW_GUI_EXPANDED is a new enhanced GUI.
   313  By default, flags == WINDOW_AUTOSIZE | WINDOW_KEEPRATIO | WINDOW_GUI_EXPANDED
   314  
   315  @param winname Name of the window in the window caption that may be used as a window identifier.
   316  @param flags Flags of the window. The supported flags are: (cv::WindowFlags)
   317   */
   318  CV_EXPORTS_W void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
   319  
   320  /** @brief Destroys the specified window.
   321  
   322  The function destroyWindow destroys the window with the given name.
   323  
   324  @param winname Name of the window to be destroyed.
   325   */
   326  CV_EXPORTS_W void destroyWindow(const String& winname);
   327  
   328  /** @brief Destroys all of the HighGUI windows.
   329  
   330  The function destroyAllWindows destroys all of the opened HighGUI windows.
   331   */
   332  CV_EXPORTS_W void destroyAllWindows();
   333  
   334  CV_EXPORTS_W int startWindowThread();
   335  
   336  /** @brief Similar to #waitKey, but returns full key code.
   337  
   338  @note
   339  
   340  Key code is implementation specific and depends on used backend: QT/GTK/Win32/etc
   341  
   342  */
   343  CV_EXPORTS_W int waitKeyEx(int delay = 0);
   344  
   345  /** @brief Waits for a pressed key.
   346  
   347  The function waitKey waits for a key event infinitely (when \f$\texttt{delay}\leq 0\f$ ) or for delay
   348  milliseconds, when it is positive. Since the OS has a minimum time between switching threads, the
   349  function will not wait exactly delay ms, it will wait at least delay ms, depending on what else is
   350  running on your computer at that time. It returns the code of the pressed key or -1 if no key was
   351  pressed before the specified time had elapsed. To check for a key press but not wait for it, use
   352  #pollKey.
   353  
   354  @note The functions #waitKey and #pollKey are the only methods in HighGUI that can fetch and handle
   355  GUI events, so one of them needs to be called periodically for normal event processing unless
   356  HighGUI is used within an environment that takes care of event processing.
   357  
   358  @note The function only works if there is at least one HighGUI window created and the window is
   359  active. If there are several HighGUI windows, any of them can be active.
   360  
   361  @param delay Delay in milliseconds. 0 is the special value that means "forever".
   362   */
   363  CV_EXPORTS_W int waitKey(int delay = 0);
   364  
   365  /** @brief Polls for a pressed key.
   366  
   367  The function pollKey polls for a key event without waiting. It returns the code of the pressed key
   368  or -1 if no key was pressed since the last invocation. To wait until a key was pressed, use #waitKey.
   369  
   370  @note The functions #waitKey and #pollKey are the only methods in HighGUI that can fetch and handle
   371  GUI events, so one of them needs to be called periodically for normal event processing unless
   372  HighGUI is used within an environment that takes care of event processing.
   373  
   374  @note The function only works if there is at least one HighGUI window created and the window is
   375  active. If there are several HighGUI windows, any of them can be active.
   376   */
   377  CV_EXPORTS_W int pollKey();
   378  
   379  /** @brief Displays an image in the specified window.
   380  
   381  The function imshow displays an image in the specified window. If the window was created with the
   382  cv::WINDOW_AUTOSIZE flag, the image is shown with its original size, however it is still limited by the screen resolution.
   383  Otherwise, the image is scaled to fit the window. The function may scale the image, depending on its depth:
   384  
   385  -   If the image is 8-bit unsigned, it is displayed as is.
   386  -   If the image is 16-bit unsigned or 32-bit integer, the pixels are divided by 256. That is, the
   387      value range [0,255\*256] is mapped to [0,255].
   388  -   If the image is 32-bit or 64-bit floating-point, the pixel values are multiplied by 255. That is, the
   389      value range [0,1] is mapped to [0,255].
   390  
   391  If window was created with OpenGL support, cv::imshow also support ogl::Buffer , ogl::Texture2D and
   392  cuda::GpuMat as input.
   393  
   394  If the window was not created before this function, it is assumed creating a window with cv::WINDOW_AUTOSIZE.
   395  
   396  If you need to show an image that is bigger than the screen resolution, you will need to call namedWindow("", WINDOW_NORMAL) before the imshow.
   397  
   398  @note This function should be followed by a call to cv::waitKey or cv::pollKey to perform GUI
   399  housekeeping tasks that are necessary to actually show the given image and make the window respond
   400  to mouse and keyboard events. Otherwise, it won't display the image and the window might lock up.
   401  For example, **waitKey(0)** will display the window infinitely until any keypress (it is suitable
   402  for image display). **waitKey(25)** will display a frame and wait approximately 25 ms for a key
   403  press (suitable for displaying a video frame-by-frame). To remove the window, use cv::destroyWindow.
   404  
   405  @note
   406  
   407  [__Windows Backend Only__] Pressing Ctrl+C will copy the image to the clipboard.
   408  
   409  [__Windows Backend Only__] Pressing Ctrl+S will show a dialog to save the image.
   410  
   411  @param winname Name of the window.
   412  @param mat Image to be shown.
   413   */
   414  CV_EXPORTS_W void imshow(const String& winname, InputArray mat);
   415  
   416  /** @brief Resizes the window to the specified size
   417  
   418  @note
   419  
   420  -   The specified window size is for the image area. Toolbars are not counted.
   421  -   Only windows created without cv::WINDOW_AUTOSIZE flag can be resized.
   422  
   423  @param winname Window name.
   424  @param width The new window width.
   425  @param height The new window height.
   426   */
   427  CV_EXPORTS_W void resizeWindow(const String& winname, int width, int height);
   428  
   429  /** @overload
   430  @param winname Window name.
   431  @param size The new window size.
   432  */
   433  CV_EXPORTS_W void resizeWindow(const String& winname, const cv::Size& size);
   434  
   435  /** @brief Moves the window to the specified position
   436  
   437  @param winname Name of the window.
   438  @param x The new x-coordinate of the window.
   439  @param y The new y-coordinate of the window.
   440   */
   441  CV_EXPORTS_W void moveWindow(const String& winname, int x, int y);
   442  
   443  /** @brief Changes parameters of a window dynamically.
   444  
   445  The function setWindowProperty enables changing properties of a window.
   446  
   447  @param winname Name of the window.
   448  @param prop_id Window property to edit. The supported operation flags are: (cv::WindowPropertyFlags)
   449  @param prop_value New value of the window property. The supported flags are: (cv::WindowFlags)
   450   */
   451  CV_EXPORTS_W void setWindowProperty(const String& winname, int prop_id, double prop_value);
   452  
   453  /** @brief Updates window title
   454  @param winname Name of the window.
   455  @param title New title.
   456  */
   457  CV_EXPORTS_W void setWindowTitle(const String& winname, const String& title);
   458  
   459  /** @brief Provides parameters of a window.
   460  
   461  The function getWindowProperty returns properties of a window.
   462  
   463  @param winname Name of the window.
   464  @param prop_id Window property to retrieve. The following operation flags are available: (cv::WindowPropertyFlags)
   465  
   466  @sa setWindowProperty
   467   */
   468  CV_EXPORTS_W double getWindowProperty(const String& winname, int prop_id);
   469  
   470  /** @brief Provides rectangle of image in the window.
   471  
   472  The function getWindowImageRect returns the client screen coordinates, width and height of the image rendering area.
   473  
   474  @param winname Name of the window.
   475  
   476  @sa resizeWindow moveWindow
   477   */
   478  CV_EXPORTS_W Rect getWindowImageRect(const String& winname);
   479  
   480  /** @example samples/cpp/create_mask.cpp
   481  This program demonstrates using mouse events and how to make and use a mask image (black and white) .
   482  */
   483  /** @brief Sets mouse handler for the specified window
   484  
   485  @param winname Name of the window.
   486  @param onMouse Callback function for mouse events. See OpenCV samples on how to specify and use the callback.
   487  @param userdata The optional parameter passed to the callback.
   488   */
   489  CV_EXPORTS void setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata = 0);
   490  
   491  /** @brief Gets the mouse-wheel motion delta, when handling mouse-wheel events cv::EVENT_MOUSEWHEEL and
   492  cv::EVENT_MOUSEHWHEEL.
   493  
   494  For regular mice with a scroll-wheel, delta will be a multiple of 120. The value 120 corresponds to
   495  a one notch rotation of the wheel or the threshold for action to be taken and one such action should
   496  occur for each delta. Some high-precision mice with higher-resolution freely-rotating wheels may
   497  generate smaller values.
   498  
   499  For cv::EVENT_MOUSEWHEEL positive and negative values mean forward and backward scrolling,
   500  respectively. For cv::EVENT_MOUSEHWHEEL, where available, positive and negative values mean right and
   501  left scrolling, respectively.
   502  
   503  @note
   504  
   505  Mouse-wheel events are currently supported only on Windows.
   506  
   507  @param flags The mouse callback flags parameter.
   508   */
   509  CV_EXPORTS int getMouseWheelDelta(int flags);
   510  
   511  /** @brief Allows users to select a ROI on the given image.
   512  
   513  The function creates a window and allows users to select a ROI using the mouse.
   514  Controls: use `space` or `enter` to finish selection, use key `c` to cancel selection (function will return the zero cv::Rect).
   515  
   516  @param windowName name of the window where selection process will be shown.
   517  @param img image to select a ROI.
   518  @param showCrosshair if true crosshair of selection rectangle will be shown.
   519  @param fromCenter if true center of selection will match initial mouse position. In opposite case a corner of
   520  selection rectangle will correspont to the initial mouse position.
   521  @return selected ROI or empty rect if selection canceled.
   522  
   523  @note The function sets it's own mouse callback for specified window using cv::setMouseCallback(windowName, ...).
   524  After finish of work an empty callback will be set for the used window.
   525   */
   526  CV_EXPORTS_W Rect selectROI(const String& windowName, InputArray img, bool showCrosshair = true, bool fromCenter = false);
   527  
   528  /** @overload
   529   */
   530  CV_EXPORTS_W Rect selectROI(InputArray img, bool showCrosshair = true, bool fromCenter = false);
   531  
   532  /** @brief Allows users to select multiple ROIs on the given image.
   533  
   534  The function creates a window and allows users to select multiple ROIs using the mouse.
   535  Controls: use `space` or `enter` to finish current selection and start a new one,
   536  use `esc` to terminate multiple ROI selection process.
   537  
   538  @param windowName name of the window where selection process will be shown.
   539  @param img image to select a ROI.
   540  @param boundingBoxes selected ROIs.
   541  @param showCrosshair if true crosshair of selection rectangle will be shown.
   542  @param fromCenter if true center of selection will match initial mouse position. In opposite case a corner of
   543  selection rectangle will correspont to the initial mouse position.
   544  
   545  @note The function sets it's own mouse callback for specified window using cv::setMouseCallback(windowName, ...).
   546  After finish of work an empty callback will be set for the used window.
   547   */
   548  CV_EXPORTS_W void selectROIs(const String& windowName, InputArray img,
   549                               CV_OUT std::vector<Rect>& boundingBoxes, bool showCrosshair = true, bool fromCenter = false);
   550  
   551  /** @brief Creates a trackbar and attaches it to the specified window.
   552  
   553  The function createTrackbar creates a trackbar (a slider or range control) with the specified name
   554  and range, assigns a variable value to be a position synchronized with the trackbar and specifies
   555  the callback function onChange to be called on the trackbar position change. The created trackbar is
   556  displayed in the specified window winname.
   557  
   558  @note
   559  
   560  [__Qt Backend Only__] winname can be empty if the trackbar should be attached to the
   561  control panel.
   562  
   563  Clicking the label of each trackbar enables editing the trackbar values manually.
   564  
   565  @param trackbarname Name of the created trackbar.
   566  @param winname Name of the window that will be used as a parent of the created trackbar.
   567  @param value Optional pointer to an integer variable whose value reflects the position of the
   568  slider. Upon creation, the slider position is defined by this variable.
   569  @param count Maximal position of the slider. The minimal position is always 0.
   570  @param onChange Pointer to the function to be called every time the slider changes position. This
   571  function should be prototyped as void Foo(int,void\*); , where the first parameter is the trackbar
   572  position and the second parameter is the user data (see the next parameter). If the callback is
   573  the NULL pointer, no callbacks are called, but only value is updated.
   574  @param userdata User data that is passed as is to the callback. It can be used to handle trackbar
   575  events without using global variables.
   576   */
   577  CV_EXPORTS int createTrackbar(const String& trackbarname, const String& winname,
   578                                int* value, int count,
   579                                TrackbarCallback onChange = 0,
   580                                void* userdata = 0);
   581  
   582  /** @brief Returns the trackbar position.
   583  
   584  The function returns the current position of the specified trackbar.
   585  
   586  @note
   587  
   588  [__Qt Backend Only__] winname can be empty if the trackbar is attached to the control
   589  panel.
   590  
   591  @param trackbarname Name of the trackbar.
   592  @param winname Name of the window that is the parent of the trackbar.
   593   */
   594  CV_EXPORTS_W int getTrackbarPos(const String& trackbarname, const String& winname);
   595  
   596  /** @brief Sets the trackbar position.
   597  
   598  The function sets the position of the specified trackbar in the specified window.
   599  
   600  @note
   601  
   602  [__Qt Backend Only__] winname can be empty if the trackbar is attached to the control
   603  panel.
   604  
   605  @param trackbarname Name of the trackbar.
   606  @param winname Name of the window that is the parent of trackbar.
   607  @param pos New position.
   608   */
   609  CV_EXPORTS_W void setTrackbarPos(const String& trackbarname, const String& winname, int pos);
   610  
   611  /** @brief Sets the trackbar maximum position.
   612  
   613  The function sets the maximum position of the specified trackbar in the specified window.
   614  
   615  @note
   616  
   617  [__Qt Backend Only__] winname can be empty if the trackbar is attached to the control
   618  panel.
   619  
   620  @param trackbarname Name of the trackbar.
   621  @param winname Name of the window that is the parent of trackbar.
   622  @param maxval New maximum position.
   623   */
   624  CV_EXPORTS_W void setTrackbarMax(const String& trackbarname, const String& winname, int maxval);
   625  
   626  /** @brief Sets the trackbar minimum position.
   627  
   628  The function sets the minimum position of the specified trackbar in the specified window.
   629  
   630  @note
   631  
   632  [__Qt Backend Only__] winname can be empty if the trackbar is attached to the control
   633  panel.
   634  
   635  @param trackbarname Name of the trackbar.
   636  @param winname Name of the window that is the parent of trackbar.
   637  @param minval New minimum position.
   638   */
   639  CV_EXPORTS_W void setTrackbarMin(const String& trackbarname, const String& winname, int minval);
   640  
   641  //! @addtogroup highgui_opengl OpenGL support
   642  //! @{
   643  
   644  /** @brief Displays OpenGL 2D texture in the specified window.
   645  
   646  @param winname Name of the window.
   647  @param tex OpenGL 2D texture data.
   648   */
   649  CV_EXPORTS void imshow(const String& winname, const ogl::Texture2D& tex);
   650  
   651  /** @brief Sets a callback function to be called to draw on top of displayed image.
   652  
   653  The function setOpenGlDrawCallback can be used to draw 3D data on the window. See the example of
   654  callback function below:
   655  @code
   656      void on_opengl(void* param)
   657      {
   658          glLoadIdentity();
   659  
   660          glTranslated(0.0, 0.0, -1.0);
   661  
   662          glRotatef( 55, 1, 0, 0 );
   663          glRotatef( 45, 0, 1, 0 );
   664          glRotatef( 0, 0, 0, 1 );
   665  
   666          static const int coords[6][4][3] = {
   667              { { +1, -1, -1 }, { -1, -1, -1 }, { -1, +1, -1 }, { +1, +1, -1 } },
   668              { { +1, +1, -1 }, { -1, +1, -1 }, { -1, +1, +1 }, { +1, +1, +1 } },
   669              { { +1, -1, +1 }, { +1, -1, -1 }, { +1, +1, -1 }, { +1, +1, +1 } },
   670              { { -1, -1, -1 }, { -1, -1, +1 }, { -1, +1, +1 }, { -1, +1, -1 } },
   671              { { +1, -1, +1 }, { -1, -1, +1 }, { -1, -1, -1 }, { +1, -1, -1 } },
   672              { { -1, -1, +1 }, { +1, -1, +1 }, { +1, +1, +1 }, { -1, +1, +1 } }
   673          };
   674  
   675          for (int i = 0; i < 6; ++i) {
   676                      glColor3ub( i*20, 100+i*10, i*42 );
   677                      glBegin(GL_QUADS);
   678                      for (int j = 0; j < 4; ++j) {
   679                              glVertex3d(0.2 * coords[i][j][0], 0.2 * coords[i][j][1], 0.2 * coords[i][j][2]);
   680                      }
   681                      glEnd();
   682          }
   683      }
   684  @endcode
   685  
   686  @param winname Name of the window.
   687  @param onOpenGlDraw Pointer to the function to be called every frame. This function should be
   688  prototyped as void Foo(void\*) .
   689  @param userdata Pointer passed to the callback function.(__Optional__)
   690   */
   691  CV_EXPORTS void setOpenGlDrawCallback(const String& winname, OpenGlDrawCallback onOpenGlDraw, void* userdata = 0);
   692  
   693  /** @brief Sets the specified window as current OpenGL context.
   694  
   695  @param winname Name of the window.
   696   */
   697  CV_EXPORTS void setOpenGlContext(const String& winname);
   698  
   699  /** @brief Force window to redraw its context and call draw callback ( See cv::setOpenGlDrawCallback ).
   700  
   701  @param winname Name of the window.
   702   */
   703  CV_EXPORTS void updateWindow(const String& winname);
   704  
   705  //! @} highgui_opengl
   706  
   707  //! @addtogroup highgui_qt
   708  //! @{
   709  
   710  /** @brief QtFont available only for Qt. See cv::fontQt
   711   */
   712  struct QtFont
   713  {
   714      const char* nameFont;  //!< Name of the font
   715      Scalar      color;     //!< Color of the font. Scalar(blue_component, green_component, red_component[, alpha_component])
   716      int         font_face; //!< See cv::QtFontStyles
   717      const int*  ascii;     //!< font data and metrics
   718      const int*  greek;
   719      const int*  cyrillic;
   720      float       hscale, vscale;
   721      float       shear;     //!< slope coefficient: 0 - normal, >0 - italic
   722      int         thickness; //!< See cv::QtFontWeights
   723      float       dx;        //!< horizontal interval between letters
   724      int         line_type; //!< PointSize
   725  };
   726  
   727  /** @brief Creates the font to draw a text on an image.
   728  
   729  The function fontQt creates a cv::QtFont object. This cv::QtFont is not compatible with putText .
   730  
   731  A basic usage of this function is the following: :
   732  @code
   733      QtFont font = fontQt("Times");
   734      addText( img1, "Hello World !", Point(50,50), font);
   735  @endcode
   736  
   737  @param nameFont Name of the font. The name should match the name of a system font (such as
   738  *Times*). If the font is not found, a default one is used.
   739  @param pointSize Size of the font. If not specified, equal zero or negative, the point size of the
   740  font is set to a system-dependent default value. Generally, this is 12 points.
   741  @param color Color of the font in BGRA where A = 255 is fully transparent. Use the macro CV_RGB
   742  for simplicity.
   743  @param weight Font weight. Available operation flags are : cv::QtFontWeights You can also specify a positive integer for better control.
   744  @param style Font style. Available operation flags are : cv::QtFontStyles
   745  @param spacing Spacing between characters. It can be negative or positive.
   746   */
   747  CV_EXPORTS QtFont fontQt(const String& nameFont, int pointSize = -1,
   748                           Scalar color = Scalar::all(0), int weight = QT_FONT_NORMAL,
   749                           int style = QT_STYLE_NORMAL, int spacing = 0);
   750  
   751  /** @brief Draws a text on the image.
   752  
   753  The function addText draws *text* on the image *img* using a specific font *font* (see example cv::fontQt
   754  )
   755  
   756  @param img 8-bit 3-channel image where the text should be drawn.
   757  @param text Text to write on an image.
   758  @param org Point(x,y) where the text should start on an image.
   759  @param font Font to use to draw a text.
   760   */
   761  CV_EXPORTS void addText( const Mat& img, const String& text, Point org, const QtFont& font);
   762  
   763  /** @brief Draws a text on the image.
   764  
   765  @param img 8-bit 3-channel image where the text should be drawn.
   766  @param text Text to write on an image.
   767  @param org Point(x,y) where the text should start on an image.
   768  @param nameFont Name of the font. The name should match the name of a system font (such as
   769  *Times*). If the font is not found, a default one is used.
   770  @param pointSize Size of the font. If not specified, equal zero or negative, the point size of the
   771  font is set to a system-dependent default value. Generally, this is 12 points.
   772  @param color Color of the font in BGRA where A = 255 is fully transparent.
   773  @param weight Font weight. Available operation flags are : cv::QtFontWeights You can also specify a positive integer for better control.
   774  @param style Font style. Available operation flags are : cv::QtFontStyles
   775  @param spacing Spacing between characters. It can be negative or positive.
   776   */
   777  CV_EXPORTS_W void addText(const Mat& img, const String& text, Point org, const String& nameFont, int pointSize = -1, Scalar color = Scalar::all(0),
   778          int weight = QT_FONT_NORMAL, int style = QT_STYLE_NORMAL, int spacing = 0);
   779  
   780  /** @brief Displays a text on a window image as an overlay for a specified duration.
   781  
   782  The function displayOverlay displays useful information/tips on top of the window for a certain
   783  amount of time *delayms*. The function does not modify the image, displayed in the window, that is,
   784  after the specified delay the original content of the window is restored.
   785  
   786  @param winname Name of the window.
   787  @param text Overlay text to write on a window image.
   788  @param delayms The period (in milliseconds), during which the overlay text is displayed. If this
   789  function is called before the previous overlay text timed out, the timer is restarted and the text
   790  is updated. If this value is zero, the text never disappears.
   791   */
   792  CV_EXPORTS_W void displayOverlay(const String& winname, const String& text, int delayms = 0);
   793  
   794  /** @brief Displays a text on the window statusbar during the specified period of time.
   795  
   796  The function displayStatusBar displays useful information/tips on top of the window for a certain
   797  amount of time *delayms* . This information is displayed on the window statusbar (the window must be
   798  created with the CV_GUI_EXPANDED flags).
   799  
   800  @param winname Name of the window.
   801  @param text Text to write on the window statusbar.
   802  @param delayms Duration (in milliseconds) to display the text. If this function is called before
   803  the previous text timed out, the timer is restarted and the text is updated. If this value is
   804  zero, the text never disappears.
   805   */
   806  CV_EXPORTS_W void displayStatusBar(const String& winname, const String& text, int delayms = 0);
   807  
   808  /** @brief Saves parameters of the specified window.
   809  
   810  The function saveWindowParameters saves size, location, flags, trackbars value, zoom and panning
   811  location of the window windowName.
   812  
   813  @param windowName Name of the window.
   814   */
   815  CV_EXPORTS void saveWindowParameters(const String& windowName);
   816  
   817  /** @brief Loads parameters of the specified window.
   818  
   819  The function loadWindowParameters loads size, location, flags, trackbars value, zoom and panning
   820  location of the window windowName.
   821  
   822  @param windowName Name of the window.
   823   */
   824  CV_EXPORTS void loadWindowParameters(const String& windowName);
   825  
   826  CV_EXPORTS  int startLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]);
   827  
   828  CV_EXPORTS  void stopLoop();
   829  
   830  /** @brief Attaches a button to the control panel.
   831  
   832  The function createButton attaches a button to the control panel. Each button is added to a
   833  buttonbar to the right of the last button. A new buttonbar is created if nothing was attached to the
   834  control panel before, or if the last element attached to the control panel was a trackbar or if the
   835  QT_NEW_BUTTONBAR flag is added to the type.
   836  
   837  See below various examples of the cv::createButton function call: :
   838  @code
   839      createButton("",callbackButton);//create a push button "button 0", that will call callbackButton.
   840      createButton("button2",callbackButton,NULL,QT_CHECKBOX,0);
   841      createButton("button3",callbackButton,&value);
   842      createButton("button5",callbackButton1,NULL,QT_RADIOBOX);
   843      createButton("button6",callbackButton2,NULL,QT_PUSH_BUTTON,1);
   844      createButton("button6",callbackButton2,NULL,QT_PUSH_BUTTON|QT_NEW_BUTTONBAR);// create a push button in a new row
   845  @endcode
   846  
   847  @param  bar_name Name of the button.
   848  @param on_change Pointer to the function to be called every time the button changes its state.
   849  This function should be prototyped as void Foo(int state,\*void); . *state* is the current state
   850  of the button. It could be -1 for a push button, 0 or 1 for a check/radio box button.
   851  @param userdata Pointer passed to the callback function.
   852  @param type Optional type of the button. Available types are: (cv::QtButtonTypes)
   853  @param initial_button_state Default state of the button. Use for checkbox and radiobox. Its
   854  value could be 0 or 1. (__Optional__)
   855  */
   856  CV_EXPORTS int createButton( const String& bar_name, ButtonCallback on_change,
   857                               void* userdata = 0, int type = QT_PUSH_BUTTON,
   858                               bool initial_button_state = false);
   859  
   860  //! @} highgui_qt
   861  
   862  //! @} highgui
   863  
   864  } // cv
   865  
   866  #endif