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  * Cameras video capture using OpenCV library.
33  *
34  * Authors:
35  * Nicolas Melchior
36  *
37  *****************************************************************************/
38 
39 /*!
40   \file vpOpenCVGrabber.h
41   \brief class for cameras video capture using OpenCV library.
42 */
43 
44 #ifndef vpOpenCVGrabber_h
45 #define vpOpenCVGrabber_h
46 
47 #include <visp3/core/vpConfig.h>
48 
49 #if (defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION < 0x020408))
50 
51 #if VISP_HAVE_OPENCV_VERSION >= 0x020101
52 #include <opencv2/highgui/highgui.hpp>
53 #else
54 #include <highgui.h>
55 #endif
56 
57 #include <visp3/core/vpFrameGrabber.h>
58 #include <visp3/core/vpImage.h>
59 #include <visp3/core/vpRGBa.h>
60 
61 /*!
62   \class vpOpenCVGrabber
63 
64   \ingroup group_sensor_camera
65 
66   \brief Class for cameras video capture using OpenCV library.
67   \deprecated This class is deprecated can only be used with OpenCV < 2.4.8.
68 
69   \note Instead of using this class, it is also possible to grab images using
70 OpenCV library by using directly OpenCV cv::VideoCapture class. The following
71 code corresponding to tutorial-grabber-opencv.cpp shows how to grab images in
72 a cv::Mat structure and then convert OpenCV images in ViSP images. \include
73 tutorial-grabber-opencv.cpp The one in grabOpencv.cpp gives an other example.
74 
75   The code below shows how to grab and
76   display images using this class.
77   \code
78 #include <visp3/gui/vpDisplayOpenCV.h>
79 #include <visp3/sensor/vpOpenCVGrabber.h>
80 
81 int main()
82 {
83 #if defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION < 0x020408)
84   try {
85     vpImage<unsigned char> I;
86 
87     vpOpenCVGrabber g;
88     g.open(I);
89 
90     std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;
91     vpDisplayOpenCV d(I);
92 
93     while(1) {
94       g.acquire(I);
95       vpDisplay::display(I);
96       vpDisplay::flush(I);
97       if (vpDisplay::getClick(I, false))
98         break;
99     }
100   }
101   catch(const vpException &e) {
102     std::cout << "Catch an exception: " << e << std::endl;
103   }
104 #endif
105 }
106   \endcode
107  */
108 class VISP_EXPORT vpOpenCVGrabber : public vpFrameGrabber
109 {
110 private:
111   CvCapture *capture;
112   int DeviceType;
113   bool flip;
114 
115 public:
116   vpOpenCVGrabber();
117   virtual ~vpOpenCVGrabber();
118 
119   void open();
120   void open(vpImage<unsigned char> &I);
121   void open(vpImage<vpRGBa> &I);
122 
123   void acquire(vpImage<unsigned char> &I);
124   void acquire(vpImage<vpRGBa> &I);
125   IplImage *acquire();
126 
127   void close();
128 
129   void getFramerate(double &framerate);
130   void setFramerate(const double framerate);
131 
132   void setWidth(unsigned int width);
133   void setHeight(unsigned int height);
134 
135   void setDeviceType(int type);
136 
137   void setFlip(bool flipType);
138 };
139 
140 #endif
141 #endif
142