Visual Servoing Platform  version 3.2.0
vpDetectorDataMatrixCode Class Reference

#include <vpDetectorDataMatrixCode.h>

+ Inheritance diagram for vpDetectorDataMatrixCode:

Public Member Functions

 vpDetectorDataMatrixCode ()
 
virtual ~vpDetectorDataMatrixCode ()
 
bool detect (const vpImage< unsigned char > &I)
 
Inherited functionalities from vpDetectorBase
vpRect getBBox (size_t i) const
 
vpImagePoint getCog (size_t i) const
 
std::vector< std::string > & getMessage ()
 
std::string & getMessage (size_t i)
 
size_t getNbObjects () const
 
std::vector< std::vector< vpImagePoint > > & getPolygon ()
 
std::vector< vpImagePoint > & getPolygon (size_t i)
 

Protected Attributes

std::vector< std::vector< vpImagePoint > > m_polygon
 
std::vector< std::string > m_message
 
size_t m_nb_objects
 

Detailed Description

Base class for bar code detector. This class is a wrapper over libdmtx available from http://www.libdmtx.org. Installation instructions are provided here https://visp.inria.fr/3rd_dmtx.

The detect() function allows to detect multiple QR codes in an image. Once detected, for each QR code it is possible to retrieve the location of the corners using getPolygon(), the encoded message using getMessage(), the bounding box using getBBox() and the center of gravity using getCog().

The following sample code shows how to use this class to detect QR codes in an image.

#include <visp3/detection/vpDetectorDataMatrixCode.h>
#include <visp3/io/vpImageIo.h>
int main()
{
#ifdef VISP_HAVE_DMTX
vpImageIo::read(I, "bar-code.pgm");
bool status = detector.detect(I);
if (status) {
for(size_t i=0; i < detector.getNbObjects(); i++) {
std::cout << "Bar code " << i << ":" << std::endl;
std::vector<vpImagePoint> p = detector.getPolygon(i);
for(size_t j=0; j < p.size(); j++)
std::cout << " Point " << j << ": " << p[j] << std::endl;
std::cout << " Message: \"" << detector.getMessage(i) << "\"" << std::endl;
}
}
#endif
}

The previous example may produce results like:

Bar code 0:
Point 0: 273.21, 78.9799
Point 1: 390.016, 85.1014
Point 2: 388.024, 199.185
Point 3: 269.23, 192.96
Message: "datamatrix 1"
Bar code 1:
Point 0: 262.23, 396.404
Point 1: 381.041, 402.631
Point 2: 378.92, 524.188
Point 3: 257.916, 519.962
Message: "datamatrix 2"

Other examples are also provided in tutorial-barcode-detector.cpp and tutorial-barcode-detector-live.cpp

Examples
tutorial-barcode-detector-live.cpp, and tutorial-barcode-detector.cpp.

Definition at line 112 of file vpDetectorDataMatrixCode.h.

Constructor & Destructor Documentation

◆ vpDetectorDataMatrixCode()

vpDetectorDataMatrixCode::vpDetectorDataMatrixCode ( )

Default constructor that does nothing.

Definition at line 51 of file vpDetectorDataMatrixCode.cpp.

◆ ~vpDetectorDataMatrixCode()

virtual vpDetectorDataMatrixCode::~vpDetectorDataMatrixCode ( )
inlinevirtual

Definition at line 116 of file vpDetectorDataMatrixCode.h.

Member Function Documentation

◆ detect()

bool vpDetectorDataMatrixCode::detect ( const vpImage< unsigned char > &  I)
virtual

Detect datamatrix bar codes in the image. Return true if a bar code is detected, false otherwise.

Parameters
I: Input image.

Implements vpDetectorBase.

Definition at line 59 of file vpDetectorDataMatrixCode.cpp.

◆ getBBox()

vpRect vpDetectorBase::getBBox ( size_t  i) const
inherited

◆ getCog()

vpImagePoint vpDetectorBase::getCog ( size_t  i) const
inherited

Return the center of gravity location of the ith object.

Examples
mbot-apriltag-2D-half-vs.cpp, and mbot-apriltag-ibvs.cpp.

Definition at line 73 of file vpDetectorBase.cpp.

◆ getMessage() [1/2]

std::vector<std::string>& vpDetectorBase::getMessage ( void  )
inlineinherited

◆ getMessage() [2/2]

std::string & vpDetectorBase::getMessage ( size_t  i)
inherited

Returns the contained message of the ith object if there is one.

Definition at line 61 of file vpDetectorBase.cpp.

◆ getNbObjects()

◆ getPolygon() [1/2]

std::vector<std::vector<vpImagePoint> >& vpDetectorBase::getPolygon ( )
inlineinherited

◆ getPolygon() [2/2]

std::vector< vpImagePoint > & vpDetectorBase::getPolygon ( size_t  i)
inherited

Returns ith object container box as a vector of points.

Definition at line 49 of file vpDetectorBase.cpp.

Member Data Documentation

◆ m_message

std::vector<std::string> vpDetectorBase::m_message
protectedinherited

Message attached to each object.

Definition at line 70 of file vpDetectorBase.h.

◆ m_nb_objects

size_t vpDetectorBase::m_nb_objects
protectedinherited

Number of detected objects.

Definition at line 71 of file vpDetectorBase.h.

◆ m_polygon

std::vector<std::vector<vpImagePoint> > vpDetectorBase::m_polygon
protectedinherited

For each object, defines the polygon that contains the object.

Definition at line 66 of file vpDetectorBase.h.

vpDetectorBase::getPolygon
std::vector< std::vector< vpImagePoint > > & getPolygon()
Definition: vpDetectorBase.h:121
vpImageIo::read
static void read(vpImage< unsigned char > &I, const std::string &filename)
Definition: vpImageIo.cpp:206
vpDetectorBase::getNbObjects
size_t getNbObjects() const
Definition: vpDetectorBase.h:116
vpDetectorDataMatrixCode::detect
bool detect(const vpImage< unsigned char > &I)
Definition: vpDetectorDataMatrixCode.cpp:59
vpImage< unsigned char >
vpDetectorDataMatrixCode
Definition: vpDetectorDataMatrixCode.h:112
vpDetectorBase::getMessage
std::vector< std::string > & getMessage()
Definition: vpDetectorBase.h:106