Visual Servoing Platform  version 3.3.0 under development (2020-02-17)
testXmlParserCamera.cpp
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  * Test vpXmlParserCamera parse / save.
33  *
34  *****************************************************************************/
35 
42 #include <visp3/core/vpXmlParserCamera.h>
43 #include <visp3/core/vpIoTools.h>
44 
45 int main()
46 {
47 #ifdef VISP_HAVE_PUGIXML
48 #if defined(_WIN32)
49  std::string tmp_dir = "C:/temp/";
50 #else
51  std::string tmp_dir = "/tmp/";
52 #endif
53 
54  // Get the user login name
55  std::string username;
56  vpIoTools::getUserName(username);
57 
58  tmp_dir += username + "/test_xml_parser_camera/";
59  vpIoTools::remove(tmp_dir);
60  std::cout << "Create: " << tmp_dir << std::endl;
61  vpIoTools::makeDirectory(tmp_dir);
62 
63  {
65  cam.initPersProjWithoutDistortion(278.4691184118, 273.9196496040, 162.0747539621, 113.1741829586);
66  std::string filename = tmp_dir + "test_write_cam_without_distortion.xml";
67  {
69  std::cout << "Write to: " << filename << std::endl;
70  if (xml.save(cam, filename, "Camera", 320, 240) != vpXmlParserCamera::SEQUENCE_OK) {
71  std::cerr << "Cannot save XML file: " << filename << std::endl;
72  return EXIT_FAILURE;
73  }
74  }
75 
76  vpCameraParameters cam_read;
77  {
79  xml.parse(cam_read, filename, "Camera", vpCameraParameters::perspectiveProjWithoutDistortion, 320, 240);
80  std::cout << "Cam write:\n" << cam << std::endl;
81  std::cout << "Cam read:\n" << cam_read << std::endl;
82  if (cam != cam_read) {
83  std::cerr << "Issue when parsing XML file: " << filename << std::endl;
84  return EXIT_FAILURE;
85  }
86  }
87  }
88 
89  {
90  std::cout << std::endl;
92  cam.initPersProjWithDistortion(276.2969237503, 271.9362132652, 162.3242102636, 113.4435399636, 0.0272549570, -0.0270531436);
93  std::string filename = tmp_dir + "test_write_cam_with_distortion.xml";
94  {
96  std::cout << "Write to: " << filename << std::endl;
97  if (xml.save(cam, filename, "Camera", 320, 240) != vpXmlParserCamera::SEQUENCE_OK) {
98  std::cerr << "Cannot save XML file: " << filename << std::endl;
99  return EXIT_FAILURE;
100  }
101  }
102 
103  vpCameraParameters cam_read;
104  {
105  vpXmlParserCamera xml;
106  xml.parse(cam_read, filename, "Camera", vpCameraParameters::perspectiveProjWithDistortion, 320, 240);
107  std::cout << "Cam write:\n" << cam << std::endl;
108  std::cout << "Cam read:\n" << cam_read << std::endl;
109  if (cam != cam_read) {
110  std::cerr << "Issue when parsing XML file: " << filename << std::endl;
111  return EXIT_FAILURE;
112  }
113  }
114  }
115 
116  vpIoTools::remove(tmp_dir);
117 #endif
118 
119  return EXIT_SUCCESS;
120 }
static void makeDirectory(const std::string &dirname)
Definition: vpIoTools.cpp:572
XML parser to load and save intrinsic camera parameters.
void initPersProjWithDistortion(double px, double py, double u0, double v0, double kud, double kdu)
Generic class defining intrinsic camera parameters.
static std::string getUserName()
Definition: vpIoTools.cpp:318
int parse(vpCameraParameters &cam, const std::string &filename, const std::string &camera_name, const vpCameraParameters::vpCameraParametersProjType &projModel, unsigned int image_width=0, unsigned int image_height=0)
void initPersProjWithoutDistortion(double px, double py, double u0, double v0)
static bool remove(const std::string &filename)
Definition: vpIoTools.cpp:855
int save(const vpCameraParameters &cam, const std::string &filename, const std::string &camera_name, unsigned int image_width=0, unsigned int image_height=0, const std::string &additionalInfo="")