Visual Servoing Platform version 3.5.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
45int 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;
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 {
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;
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 {
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 {
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:316
static void makeDirectory(const std::string &dirname)
Definition: vpIoTools.cpp:570
static bool remove(const std::string &filename)
Definition: vpIoTools.cpp:929
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)