Visual Servoing Platform version 3.6.0
Loading...
Searching...
No Matches
tutorial-barcode-detector.cpp
1
3#include <visp3/detection/vpDetectorDataMatrixCode.h>
4#include <visp3/detection/vpDetectorQRCode.h>
6#include <visp3/gui/vpDisplayGDI.h>
7#include <visp3/gui/vpDisplayOpenCV.h>
8#include <visp3/gui/vpDisplayX.h>
9#include <visp3/io/vpImageIo.h>
10
11int main(int argc, const char **argv)
12{
14#if (defined(VISP_HAVE_ZBAR) || defined(VISP_HAVE_DMTX)) && \
15 (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
17 try {
19 vpImageIo::read(I, "bar-code.pgm");
20
21#ifdef VISP_HAVE_X11
22 vpDisplayX d(I);
23#elif defined(VISP_HAVE_GDI)
24 vpDisplayGDI d(I);
25#elif defined(HAVE_OPENCV_HIGHGUI)
26 vpDisplayOpenCV d(I);
27#endif
28
30 vpDetectorBase *detector = NULL;
32
33#if (defined(VISP_HAVE_ZBAR) && defined(VISP_HAVE_DMTX))
34 int opt_barcode = 0; // 0=QRCode, 1=DataMatrix
35
36 for (int i = 0; i < argc; i++) {
37 if (std::string(argv[i]) == "--code-type")
38 opt_barcode = atoi(argv[i + 1]);
39 else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") {
40 std::cout << "Usage: " << argv[0] << " [--code-type <0 for QR code | 1 for DataMatrix code>] [--help] [-h]"
41 << std::endl;
42 return EXIT_SUCCESS;
43 }
44 }
46 if (opt_barcode == 0)
47 detector = new vpDetectorQRCode;
48 else
49 detector = new vpDetectorDataMatrixCode;
51#elif defined(VISP_HAVE_ZBAR)
52 detector = new vpDetectorQRCode;
53 (void)argc;
54 (void)argv;
55#elif defined(VISP_HAVE_DMTX)
56 detector = new vpDetectorDataMatrixCode;
57 (void)argc;
58 (void)argv;
59#endif
60
62
64 bool status = detector->detect(I);
66 std::ostringstream legend;
67 legend << detector->getNbObjects() << " bar code detected";
68 vpDisplay::displayText(I, (int)I.getHeight() - 30, 10, legend.str(), vpColor::red);
69
71 if (status) {
72 for (size_t i = 0; i < detector->getNbObjects(); i++) {
75 std::vector<vpImagePoint> p = detector->getPolygon(i);
76 vpRect bbox = detector->getBBox(i);
80 vpDisplay::displayText(I, (int)(bbox.getTop() - 10), (int)bbox.getLeft(),
81 "Message: \"" + detector->getMessage(i) + "\"", vpColor::red);
83 for (size_t j = 0; j < p.size(); j++) {
85 std::ostringstream number;
86 number << j;
87 vpDisplay::displayText(I, p[j] + vpImagePoint(15, 5), number.str(), vpColor::blue);
88 }
89 }
90
91 vpDisplay::displayText(I, (int)I.getHeight() - 15, 10, "A click to quit...", vpColor::red);
94 }
95 delete detector;
96 } catch (const vpException &e) {
97 std::cout << "Catch an exception: " << e.getMessage() << std::endl;
98 }
99#else
100 (void)argc;
101 (void)argv;
102#endif
103}
static const vpColor red
Definition vpColor.h:211
static const vpColor blue
Definition vpColor.h:217
static const vpColor green
Definition vpColor.h:214
std::vector< std::vector< vpImagePoint > > & getPolygon()
vpRect getBBox(size_t i) const
std::vector< std::string > & getMessage()
size_t getNbObjects() const
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...
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
Definition vpDisplayX.h:132
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 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.
Definition vpException.h:59
const char * getMessage() const
static void read(vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition of the vpImage class member functions.
Definition vpImage.h:135
unsigned int getHeight() const
Definition vpImage.h:184
Defines a rectangle in the plane.
Definition vpRect.h:76
double getLeft() const
Definition vpRect.h:170
double getTop() const
Definition vpRect.h:189