Visual Servoing Platform  version 3.4.0
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 #if defined(_WIN32)
48  std::string tmp_dir = "C:/temp/";
49 #else
50  std::string tmp_dir = "/tmp/";
51 #endif
52 
53  // Get the user login name
54  std::string username;
55  vpIoTools::getUserName(username);
56 
57  tmp_dir += username + "/test_xml_parser_camera/";
58  vpIoTools::remove(tmp_dir);
59  std::cout << "Create: " << tmp_dir << std::endl;
60  vpIoTools::makeDirectory(tmp_dir);
61 
62  {
64  cam.initPersProjWithoutDistortion(278.4691184118, 273.9196496040, 162.0747539621, 113.1741829586);
65  std::string filename = tmp_dir + "test_write_cam_without_distortion.xml";
66  {
68  std::cout << "Write to: " << filename << std::endl;
69  if (xml.save(cam, filename, "Camera", 320, 240) != vpXmlParserCamera::SEQUENCE_OK) {
70  std::cerr << "Cannot save XML file: " << filename << std::endl;
71  return EXIT_FAILURE;
72  }
73  }
74 
75  vpCameraParameters cam_read;
76  {
78  xml.parse(cam_read, filename, "Camera", vpCameraParameters::perspectiveProjWithoutDistortion, 320, 240);
79  std::cout << "Cam write:\n" << cam << std::endl;
80  std::cout << "Cam read:\n" << cam_read << std::endl;
81  if (cam != cam_read) {
82  std::cerr << "Issue when parsing XML file: " << filename << std::endl;
83  return EXIT_FAILURE;
84  }
85  }
86  }
87 
88  {
89  std::cout << std::endl;
91  cam.initPersProjWithDistortion(276.2969237503, 271.9362132652, 162.3242102636, 113.4435399636, 0.0272549570, -0.0270531436);
92  std::string filename = tmp_dir + "test_write_cam_with_distortion.xml";
93  {
95  std::cout << "Write to: " << filename << std::endl;
96  if (xml.save(cam, filename, "Camera", 320, 240) != vpXmlParserCamera::SEQUENCE_OK) {
97  std::cerr << "Cannot save XML file: " << filename << std::endl;
98  return EXIT_FAILURE;
99  }
100  }
101 
102  vpCameraParameters cam_read;
103  {
104  vpXmlParserCamera xml;
105  xml.parse(cam_read, filename, "Camera", vpCameraParameters::perspectiveProjWithDistortion, 320, 240);
106  std::cout << "Cam write:\n" << cam << std::endl;
107  std::cout << "Cam read:\n" << cam_read << std::endl;
108  if (cam != cam_read) {
109  std::cerr << "Issue when parsing XML file: " << filename << std::endl;
110  return EXIT_FAILURE;
111  }
112  }
113  }
114 
115  {
116  std::cout << std::endl;
117  vpCameraParameters cam;
118  std::vector<double> distortion_coeffs;
119  distortion_coeffs.push_back(-0.00297341705299914);
120  distortion_coeffs.push_back(0.0352853797376156);
121  distortion_coeffs.push_back(-0.032205019146204);
122  distortion_coeffs.push_back(0.004446716979146);
123  distortion_coeffs.push_back(0);
124  cam.initProjWithKannalaBrandtDistortion(285.523895263672, 286.6708984375, 420.874114990234, 381.085388183594, distortion_coeffs);
125  std::string filename = tmp_dir + "test_write_cam_with_KannalaBrandt_distortion.xml";
126  {
127  vpXmlParserCamera xml;
128  std::cout << "Write to: " << filename << std::endl;
129  if (xml.save(cam, filename, "Camera", 800, 848) != vpXmlParserCamera::SEQUENCE_OK) {
130  std::cerr << "Cannot save XML file: " << filename << std::endl;
131  return EXIT_FAILURE;
132  }
133  }
134 
135  vpCameraParameters cam_read;
136  {
137  vpXmlParserCamera xml;
138  xml.parse(cam_read, filename, "Camera", vpCameraParameters::ProjWithKannalaBrandtDistortion, 800, 848);
139  std::cout << "Cam write:\n" << cam << std::endl;
140  std::cout << "Cam read:\n" << cam_read << std::endl;
141  if (cam != cam_read) {
142  std::cerr << "Issue when parsing XML file: " << filename << std::endl;
143  return EXIT_FAILURE;
144  }
145  }
146  }
147 
148  vpIoTools::remove(tmp_dir);
149 
150  return EXIT_SUCCESS;
151 }
Generic class defining intrinsic camera parameters.
void initPersProjWithoutDistortion(double px, double py, double u0, double v0)
void initPersProjWithDistortion(double px, double py, double u0, double v0, double kud, double kdu)
void initProjWithKannalaBrandtDistortion(double px, double py, double u0, double v0, const std::vector< double > &distortion_coefficients)
static std::string getUserName()
Definition: vpIoTools.cpp:228
static void makeDirectory(const std::string &dirname)
Definition: vpIoTools.cpp:482
static bool remove(const std::string &filename)
Definition: vpIoTools.cpp:765
XML parser to load and save intrinsic camera parameters.
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="")
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)