ViSP  2.6.2

#include <vpXmlParserCamera.h>

+ Inheritance diagram for vpXmlParserCamera:

Public Types

enum  vpXmlCodeType {
  CODE_XML_BAD = -1, CODE_XML_OTHER, CODE_XML_CAMERA, CODE_XML_CAMERA_NAME,
  CODE_XML_HEIGHT, CODE_XML_WIDTH, CODE_XML_SUBSAMPLING_WIDTH, CODE_XML_SUBSAMPLING_HEIGHT,
  CODE_XML_FULL_HEIGHT, CODE_XML_FULL_WIDTH, CODE_XML_MODEL, CODE_XML_MODEL_TYPE,
  CODE_XML_U0, CODE_XML_V0, CODE_XML_PX, CODE_XML_PY,
  CODE_XML_KUD, CODE_XML_KDU
}
 
enum  vpXmlCodeSequenceType { SEQUENCE_OK, SEQUENCE_ERROR }
 

Public Member Functions

 vpXmlParserCamera ()
 
 vpXmlParserCamera (vpXmlParserCamera &twinParser)
 
vpXmlParserCameraoperator= (const vpXmlParserCamera &twinparser)
 
 ~vpXmlParserCamera ()
 
int parse (vpCameraParameters &cam, const char *filename, const std::string &camera_name, const vpCameraParameters::vpCameraParametersProjType &projModel, const unsigned int image_width=0, const unsigned int image_height=0)
 
int save (const vpCameraParameters &cam, const char *filename, const std::string &camera_name, const unsigned int image_width=0, const unsigned int image_height=0)
 
std::string getCameraName ()
 
unsigned int getWidth ()
 
unsigned int getHeight ()
 
unsigned int getSubsampling_width ()
 
unsigned int getSubsampling_height ()
 
vpCameraParameters getCameraParameters ()
 
void setCameraName (const std::string &camera_name)
 
void setWidth (const unsigned int width)
 
void setHeight (const unsigned int height)
 
void setSubsampling_width (const unsigned int subsampling_width)
 
void setSubsampling_height (const unsigned int subsampling_height)
 
void parse (const std::string &filename)
 
void save (const std::string &filename, const bool append=false)
 
void setMap (const std::map< std::string, int > &_map)
 
void setMainTag (const std::string &tag)
 

Static Public Member Functions

static void cleanup ()
 

Protected Member Functions

std::string xmlReadStringChild (xmlDocPtr doc, xmlNodePtr node)
 
char * xmlReadCharChild (xmlDocPtr doc, xmlNodePtr node)
 
int xmlReadIntChild (xmlDocPtr doc, xmlNodePtr node)
 
unsigned int xmlReadUnsignedIntChild (xmlDocPtr doc, xmlNodePtr node)
 
double xmlReadDoubleChild (xmlDocPtr doc, xmlNodePtr node)
 
void xmlWriteStringChild (xmlNodePtr node, const char *label, const std::string &value)
 
void xmlWriteCharChild (xmlNodePtr node, const char *label, const char *value)
 
void xmlWriteIntChild (xmlNodePtr node, const char *label, const int value)
 
void xmlWriteUnsignedIntChild (xmlNodePtr node, const char *label, const unsigned int value)
 
void xmlWriteDoubleChild (xmlNodePtr node, const char *label, const double value)
 

Protected Attributes

std::map< std::string, int > nodeMap
 
std::string main_tag
 

Detailed Description

XML parser to load and save intrinsic camera parameters.

To have a complete description of the camera parameters and the corresponding projection model implemented in ViSP, see vpCameraParameters.

Example of an XML file "myXmlFile.xml" containing intrinsic camera parameters:

<?xml version="1.0"?>
<root>
<camera>
<name>myCamera</name>
<image_width>640</image_width>
<image_height>480</image_height>
<model>
<type>perspectiveProjWithoutDistortion</type>
<px>1129.0</px>
<py>1130.6</py>
<u0>317.9</u0>
<v0>229.1</v0>
</model>
<model>
<type>perspectiveProjWithDistortion</type>
<px>1089.9</px>
<py>1090.1</py>
<u0>326.1</u0>
<v0>230.5</v0>
<kud>-0.196</kud>
<kdu>0.204</kdu>
</model>
</camera>
</root>

Example of loading existing camera parameters from an XML file:

#include <visp/vpCameraParameters.h>
#include <visp/vpXmlParserCamera.h>
int main()
{
vpCameraParameters cam; // Create a camera parameter container
#ifdef VISP_HAVE_XML2
vpXmlParserCamera p; // Create a XML parser
vpCameraParameters::vpCameraParametersProjType projModel; // Projection model
// Use a perspective projection model without distorsion
// Parse the xml file "myXmlFile.xml" to find the intrinsic camera
// parameters of the camera named "myCamera" for the image sizes 640x480,
// for the projection model projModel. The size of the image is optional
// if camera parameters are given only for one image size.
if (p.parse(cam, "myXmlFile.xml", "myCamera", projModel,640,480) != vpXmlParserCamera::SEQUENCE_OK) {
std::cout << "Cannot found myCamera" << std::endl;
}
// cout the parameters
// Get the camera parameters for the model without distorsion
double px = cam.get_px();
double py = cam.get_py();
double u0 = cam.get_u0();
double v0 = cam.get_v0();
// Now we modify the principal point (u0,v0) for example to add noise
u0 *= 0.9;
v0 *= 0.8;
// Set the new camera parameters
cam.initPersProjWithoutDistortion(px, py, u0, v0);
// Save the parameters in a new file "myXmlFileWithNoise.xml"
p.save(cam,"myXmlFileWithNoise.xml",p.getCameraName(),p.getWidth(),p.getHeight());
// Clean up memory allocated by the xml library
#endif
}

Example of writing an XML file containing intrinsic camera parameters:

#include <visp/vpCameraParameters.h>
#include <visp/vpXmlParserCamera.h>
int main()
{
// Create a camera parameter container. We want to set these parameters
// for a 320x240 image, and we want to use the perspective projection
// modelisation without distortion.
// Set the principal point coordinates (u0,v0)
double u0 = 162.3;
double v0 = 122.4;
// Set the pixel ratio (px, py)
double px = 563.2;
double py = 564.1;
// Set the camera parameters for a model without distorsion
cam.initPersProjWithoutDistortion(px, py, u0, v0);
#ifdef VISP_HAVE_XML2
// Create a XML parser
// Save the camera parameters in an XML file.
if (p.save(cam, "myNewXmlFile.xml", "myNewCamera", 320, 240) != vpXmlParserCamera::SEQUENCE_OK) {
std::cout << "Cannot save camera parameters" << std::endl;
}
// Clean up memory allocated by the xml library
#endif
}

Definition at line 189 of file vpXmlParserCamera.h.

Member Enumeration Documentation

Enumerator
SEQUENCE_OK 
SEQUENCE_ERROR 

Definition at line 217 of file vpXmlParserCamera.h.

Enumerator
CODE_XML_BAD 
CODE_XML_OTHER 
CODE_XML_CAMERA 
CODE_XML_CAMERA_NAME 
CODE_XML_HEIGHT 
CODE_XML_WIDTH 
CODE_XML_SUBSAMPLING_WIDTH 
CODE_XML_SUBSAMPLING_HEIGHT 
CODE_XML_FULL_HEIGHT 
CODE_XML_FULL_WIDTH 
CODE_XML_MODEL 
CODE_XML_MODEL_TYPE 
CODE_XML_U0 
CODE_XML_V0 
CODE_XML_PX 
CODE_XML_PY 
CODE_XML_KUD 
CODE_XML_KDU 

Definition at line 195 of file vpXmlParserCamera.h.

Constructor & Destructor Documentation

vpXmlParserCamera::vpXmlParserCamera ( )

Default constructor

Definition at line 83 of file vpXmlParserCamera.cpp.

vpXmlParserCamera::vpXmlParserCamera ( vpXmlParserCamera twinParser)

Copy constructor

Parameters
twinParser: parser object to copy

Definition at line 96 of file vpXmlParserCamera.cpp.

vpXmlParserCamera::~vpXmlParserCamera ( )
inline

Definition at line 242 of file vpXmlParserCamera.h.

Member Function Documentation

static void vpXmlParser::cleanup ( )
inlinestaticinherited

As stated in http://xmlsoft.org/html/libxml-parser.html#xmlCleanupParser to clean up memory allocated by the xml2 library itself, the user should call xmlCleanupParser() only when the process has finished using the xml2 library. In case of doubt abstain from calling this function or do it just before calling exit() to avoid leak reports from valgrind ! That's why in ViSP the destructor doesn't call xmlCleanupParser(). Rather we provide the static function vpXmlParser::cleanup() that calls xmlCleanupParser() that could be called just before exit().

Examples:
mbtTracking.cpp, and testXmlParser.cpp.

Definition at line 220 of file vpXmlParser.h.

std::string vpXmlParserCamera::getCameraName ( )
inline

Definition at line 253 of file vpXmlParserCamera.h.

vpCameraParameters vpXmlParserCamera::getCameraParameters ( )
inline

Definition at line 258 of file vpXmlParserCamera.h.

unsigned int vpXmlParserCamera::getHeight ( )
inline

Definition at line 255 of file vpXmlParserCamera.h.

unsigned int vpXmlParserCamera::getSubsampling_height ( )
inline

Definition at line 257 of file vpXmlParserCamera.h.

unsigned int vpXmlParserCamera::getSubsampling_width ( )
inline

Definition at line 256 of file vpXmlParserCamera.h.

unsigned int vpXmlParserCamera::getWidth ( )
inline

Definition at line 254 of file vpXmlParserCamera.h.

vpXmlParserCamera & vpXmlParserCamera::operator= ( const vpXmlParserCamera twinParser)

Copy operator

Parameters
twinParser: parser object to copy
Returns
a copy of the input.

Definition at line 113 of file vpXmlParserCamera.cpp.

void vpXmlParser::parse ( const std::string &  filename)
inherited

parse the document. The data in the file are stored in the attributes of the child class. This method calls the readMainClass method which has to be implemented for every child class depending on the content to parse.

Parameters
filename: name of the file to parse

Definition at line 343 of file vpXmlParser.cpp.

References vpException::ioError, vpXmlParser::readMainClass(), and vpERROR_TRACE.

int vpXmlParserCamera::parse ( vpCameraParameters cam,
const char *  filename,
const std::string &  camera_name,
const vpCameraParameters::vpCameraParametersProjType projModel,
const unsigned int  image_width = 0,
const unsigned int  image_height = 0 
)

Parse an xml file to load camera parameters.

Parameters
cam: camera parameters to fill.
filename: name of the xml file to parse
camera_name: name of the camera : useful if the xml file has multiple camera parameters. Set as "" if the camera name is not ambiguous.
projModel: camera projection model needed.
image_width: image width on which camera calibration was performed. Set as 0 if not ambiguous.
image_height: image height on which camera calibration was performed. Set as 0 if not ambiguous.
Returns
error code.

Definition at line 140 of file vpXmlParserCamera.cpp.

References SEQUENCE_ERROR.

Referenced by vpViper850::getCameraParameters(), vpAfma6::getCameraParameters(), and vpKinect::start().

void vpXmlParser::save ( const std::string &  filename,
const bool  append = false 
)
inherited

Save the content of the class in the file given in parameters. The data of the class are in the child class. This method calls the write_main_class method which has to be implemented for every class depending on the data to save.

Parameters
filename: the name of the file used to record the data
append: if true and if the file exists, the data will be added to the data already in the file

Definition at line 376 of file vpXmlParser.cpp.

References vpException::ioError, vpXmlParser::main_tag, vpERROR_TRACE, and vpXmlParser::writeMainClass().

int vpXmlParserCamera::save ( const vpCameraParameters cam,
const char *  filename,
const std::string &  camera_name,
const unsigned int  image_width = 0,
const unsigned int  image_height = 0 
)

Save camera parameters in an xml file.

Parameters
cam: camera parameters to save.
filename: name of the xml file to fill.
camera_name: name of the camera : useful if the xml file has multiple camera parameters. Set as "" if the camera name is not ambiguous.
image_width: width of image on which camera calibration was performed. Set as 0 if not ambiguous.
image_height: height of the image on which camera calibration was performed. Set as 0 if not ambiguous.
Returns
error code.

Definition at line 185 of file vpXmlParserCamera.cpp.

References vpCameraParameters::get_projModel(), SEQUENCE_ERROR, SEQUENCE_OK, and vpCERROR.

void vpXmlParserCamera::setCameraName ( const std::string &  camera_name)
inline

Definition at line 260 of file vpXmlParserCamera.h.

void vpXmlParserCamera::setHeight ( const unsigned int  height)
inline

Definition at line 264 of file vpXmlParserCamera.h.

void vpXmlParser::setMainTag ( const std::string &  tag)
inlineinherited

set the name of the main tag

The main tag corresponds to the name of the root node

Parameters
tag: name of the root node of the document

Definition at line 280 of file vpXmlParser.h.

void vpXmlParser::setMap ( const std::map< std::string, int > &  _map)
inlineinherited

Set the map describing the data to parse. This map stores the name of each node and an associated key used to simplify the parsing of the file.

If the following file want to be parsed:

<config>
<range>5</range>
<step>7</step>
<size_filter>3</size_filter>
</config>

The following map has to be declared:

std::map dataToParse;
dataToParse["config"] = 0;
dataToParse["range"] = 1;
dataToParse["step"] = 2;
dataToParse["size_filter"] = 3;

Or, you can use keyzord instead of number as key but it implies to declare in the child class an enumeration type of the name. For example:

typedef enum{
config,
range,
step,
size_filter} data_enum;
std::map dataToParse;
dataToParse["config"] = config;
dataToParse["range"] = range;
dataToParse["step"] = step;
dataToParse["size_filter"] = size_filter;
Parameters
_map: the map describing the data to parse

Definition at line 271 of file vpXmlParser.h.

void vpXmlParserCamera::setSubsampling_height ( const unsigned int  subsampling_height)
inline

Definition at line 268 of file vpXmlParserCamera.h.

void vpXmlParserCamera::setSubsampling_width ( const unsigned int  subsampling_width)
inline

Definition at line 265 of file vpXmlParserCamera.h.

void vpXmlParserCamera::setWidth ( const unsigned int  width)
inline

Definition at line 263 of file vpXmlParserCamera.h.

char * vpXmlParser::xmlReadCharChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

Read an array of character.

Warning
The array of characters is allocated and must be explicitly freed to avoid memory leak.
Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
pointer to an allocated array of character.

Definition at line 110 of file vpXmlParser.cpp.

References vpException::fatalError.

double vpXmlParser::xmlReadDoubleChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

read a double

Warning
throw a vpException::ioError if the value cannot be parsed to an integer
Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
the double value in the node

Definition at line 224 of file vpXmlParser.cpp.

References vpException::fatalError, and vpException::ioError.

int vpXmlParser::xmlReadIntChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

read an int

Warning
throw a vpException::ioError if the value cannot be parsed to an integer
Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
the integer value in the node

Definition at line 155 of file vpXmlParser.cpp.

References vpException::fatalError, and vpException::ioError.

std::string vpXmlParser::xmlReadStringChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

Read an array of character.

Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
std::string representing the value.

Definition at line 131 of file vpXmlParser.cpp.

References vpException::fatalError.

unsigned int vpXmlParser::xmlReadUnsignedIntChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

read an int

Warning
throw a vpException::ioError if the value cannot be parsed to an integer
Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
the unsigned integer value in the node

Definition at line 189 of file vpXmlParser.cpp.

References vpException::fatalError, and vpException::ioError.

void vpXmlParser::xmlWriteCharChild ( xmlNodePtr  node,
const char *  label,
const char *  value 
)
protectedinherited

write an array of character.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: pointer to the array of character to write

Definition at line 254 of file vpXmlParser.cpp.

void vpXmlParser::xmlWriteDoubleChild ( xmlNodePtr  node,
const char *  label,
const double  value 
)
protectedinherited

write a double.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: double to write

Definition at line 320 of file vpXmlParser.cpp.

void vpXmlParser::xmlWriteIntChild ( xmlNodePtr  node,
const char *  label,
const int  value 
)
protectedinherited

write an integer.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: integer to write

Definition at line 285 of file vpXmlParser.cpp.

void vpXmlParser::xmlWriteStringChild ( xmlNodePtr  node,
const char *  label,
const std::string &  value 
)
protectedinherited

write an array of character.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: std::string to write;

Definition at line 269 of file vpXmlParser.cpp.

void vpXmlParser::xmlWriteUnsignedIntChild ( xmlNodePtr  node,
const char *  label,
const unsigned int  value 
)
protectedinherited

write an unsigned integer.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: unsigned integer to write

Definition at line 302 of file vpXmlParser.cpp.

Member Data Documentation

std::string vpXmlParser::main_tag
protectedinherited

The name of the main tag for the file to parse

Definition at line 202 of file vpXmlParser.h.

Referenced by vpXmlParser::save(), and vpXmlParser::vpXmlParser().

std::map<std::string, int> vpXmlParser::nodeMap
protectedinherited

The map describing the data to parse

Definition at line 197 of file vpXmlParser.h.

Referenced by vpXmlParser::vpXmlParser().