1 #include <visp3/core/vpConfig.h>
3 #include <visp3/core/vpImageConvert.h>
4 #include <visp3/detection/vpDetectorDataMatrixCode.h>
5 #include <visp3/detection/vpDetectorQRCode.h>
6 #include <visp3/gui/vpDisplayGDI.h>
7 #include <visp3/gui/vpDisplayOpenCV.h>
8 #include <visp3/gui/vpDisplayX.h>
9 #ifdef VISP_HAVE_MODULE_SENSOR
10 #include <visp3/sensor/vpV4l2Grabber.h>
13 #if defined(HAVE_OPENCV_VIDEOIO)
14 #include <opencv2/videoio.hpp>
17 int main(
int argc,
const char **argv)
19 #if (defined(VISP_HAVE_V4L2) || defined(HAVE_OPENCV_VIDEOIO)) && (defined(VISP_HAVE_ZBAR) || defined(VISP_HAVE_DMTX))
20 #ifdef ENABLE_VISP_NAMESPACE
26 for (
int i = 0; i < argc; i++) {
27 if (std::string(argv[i]) ==
"--device")
28 opt_device = atoi(argv[i + 1]);
29 else if (std::string(argv[i]) ==
"--code-type")
30 opt_barcode = atoi(argv[i + 1]);
31 else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
32 std::cout <<
"Usage: " << argv[0]
33 <<
" [--device <camera number>] [--code-type <0 for QR code | "
34 "1 for DataMatrix code>] [--help] [-h]"
39 std::cout <<
"Use device: " << opt_device << std::endl;
45 #if defined(VISP_HAVE_V4L2)
47 std::ostringstream device;
48 device <<
"/dev/video" << opt_device;
52 #elif defined(HAVE_OPENCV_VIDEOIO)
53 cv::VideoCapture cap(opt_device);
54 if (!cap.isOpened()) {
55 std::cout <<
"Failed to open the camera" << std::endl;
64 #if defined(VISP_HAVE_X11)
66 #elif defined(VISP_HAVE_GDI)
68 #elif defined(HAVE_OPENCV_HIGHGUI)
74 #if (defined(VISP_HAVE_ZBAR) && defined(VISP_HAVE_DMTX))
76 detector =
new vpDetectorQRCode;
79 #elif defined(VISP_HAVE_ZBAR)
80 detector =
new vpDetectorQRCode;
82 #elif defined(VISP_HAVE_DMTX)
89 #if defined(VISP_HAVE_V4L2)
91 #elif defined(HAVE_OPENCV_VIDEOIO)
98 bool status = detector->
detect(I);
99 std::ostringstream legend;
100 legend << detector->
getNbObjects() <<
" bar code detected";
105 std::vector<vpImagePoint> p = detector->
getPolygon(i);
110 for (
size_t j = 0; j < p.size(); j++) {
112 std::ostringstream number;
127 std::cout <<
"Catch an exception: " << e << std::endl;
static const vpColor blue
static const vpColor green
std::vector< std::vector< vpImagePoint > > & getPolygon()
vpRect getBBox(size_t i) const
size_t getNbObjects() const
std::vector< std::string > & getMessage()
virtual bool detect(const vpImage< unsigned char > &I)=0
Display for windows using GDI (available on any windows 32 platform).
The vpDisplayOpenCV allows to display image using the OpenCV library. Thus to enable this class OpenC...
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
static void display(const vpImage< unsigned char > &I)
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 flush(const vpImage< unsigned char > &I)
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 displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
error that can be emitted by ViSP classes.
static void convert(const vpImage< unsigned char > &src, vpImage< vpRGBa > &dest)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
unsigned int getHeight() const
Defines a rectangle in the plane.
Class that is a wrapper over the Video4Linux2 (V4L2) driver.
void setScale(unsigned scale=vpV4l2Grabber::DEFAULT_SCALE)
void setDevice(const std::string &devname)
void acquire(vpImage< unsigned char > &I)