Visual Servoing Platform version 3.6.0
Loading...
Searching...
No Matches
vpDiskGrabber.cpp
1/*
2 * ViSP, open source Visual Servoing Platform software.
3 * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
4 *
5 * This software is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 * See the file LICENSE.txt at the root directory of this source
10 * distribution for additional information about the GNU GPL.
11 *
12 * For using ViSP with software that can not be combined with the GNU
13 * GPL, please contact Inria about acquiring a ViSP Professional
14 * Edition License.
15 *
16 * See https://visp.inria.fr for more information.
17 *
18 * This software was developed at:
19 * Inria Rennes - Bretagne Atlantique
20 * Campus Universitaire de Beaulieu
21 * 35042 Rennes Cedex
22 * France
23 *
24 * If you have questions regarding the use of this file, please contact
25 * Inria at visp@inria.fr
26 *
27 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29 *
30 * Description:
31 * Disk framegrabber.
32 */
33
34#include <visp3/io/vpDiskGrabber.h>
35
37 : m_image_number(0), m_image_number_next(0), m_image_step(1), m_number_of_zero(0), m_directory("/tmp"),
38 m_base_name("I"), m_extension("pgm"), m_use_generic_name(false), m_generic_name("empty")
39{
40 init = false;
41}
42
43
44vpDiskGrabber::vpDiskGrabber(const std::string &generic_name)
45 : m_image_number(0), m_image_number_next(0), m_image_step(1), m_number_of_zero(0), m_directory("/tmp"),
46 m_base_name("I"), m_extension("pgm"), m_use_generic_name(true), m_generic_name(generic_name)
47{
48 init = false;
49}
50
51vpDiskGrabber::vpDiskGrabber(const std::string &dir, const std::string &basename, long number, int step,
52 unsigned int noz, const std::string &ext)
53 : m_image_number(number), m_image_number_next(number), m_image_step(step), m_number_of_zero(noz), m_directory(dir),
54 m_base_name(basename), m_extension(ext), m_use_generic_name(false), m_generic_name("empty"), m_image_name()
55{
56 init = false;
57}
58
60{
61 long first_number = getImageNumber();
62
63 acquire(I);
64
65 setImageNumber(first_number);
66
67 width = I.getWidth();
68 height = I.getHeight();
69
70 init = true;
71}
72
74{
75 // First we save the image number, so that it can be reaffected after the
76 // acquisition. That means that the first image is readed twice
77 long first_number = getImageNumber();
78
79 acquire(I);
80
81 setImageNumber(first_number);
82
83 width = I.getWidth();
84 height = I.getHeight();
85
86 init = true;
87}
88
90{
91 // First we save the image number, so that it can be reaffected after the
92 // acquisition. That means that the first image is readed twice
93 long first_number = getImageNumber();
94
95 acquire(I);
96
97 setImageNumber(first_number);
98
99 width = I.getWidth();
100 height = I.getHeight();
101
102 init = true;
103}
104
106{
107 m_image_number = m_image_number_next;
108 std::stringstream ss;
109
110 if (m_use_generic_name) {
111 char filename[FILENAME_MAX];
112 snprintf(filename, FILENAME_MAX, m_generic_name.c_str(), m_image_number);
113 ss << filename;
114 }
115 else {
116 ss << m_directory << "/" << m_base_name << std::setfill('0') << std::setw(m_number_of_zero) << m_image_number << "."
117 << m_extension;
118 }
119
120 m_image_number_next += m_image_step;
121 m_image_name = ss.str();
122 vpImageIo::read(I, m_image_name);
123
124 width = I.getWidth();
125 height = I.getHeight();
126}
127
129{
130 m_image_number = m_image_number_next;
131 std::stringstream ss;
132
133 if (m_use_generic_name) {
134 char filename[FILENAME_MAX];
135 snprintf(filename, FILENAME_MAX, m_generic_name.c_str(), m_image_number);
136 ss << filename;
137 }
138 else {
139 ss << m_directory << "/" << m_base_name << std::setfill('0') << std::setw(m_number_of_zero) << m_image_number << "."
140 << m_extension;
141 }
142
143 m_image_number_next += m_image_step;
144 m_image_name = ss.str();
145 vpImageIo::read(I, m_image_name);
146
147 width = I.getWidth();
148 height = I.getHeight();
149}
150
152{
153 m_image_number = m_image_number_next;
154 std::stringstream ss;
155 if (m_use_generic_name) {
156 char filename[FILENAME_MAX];
157 snprintf(filename, FILENAME_MAX, m_generic_name.c_str(), m_image_number);
158 ss << filename;
159 }
160 else {
161 ss << m_directory << "/" << m_base_name << std::setfill('0') << std::setw(m_number_of_zero) << m_image_number << "."
162 << m_extension;
163 }
164
165 m_image_number_next += m_image_step;
166
167 vpImageIo::readPFM(I, ss.str());
168
169 width = I.getWidth();
170 height = I.getHeight();
171}
172
174{
175 m_image_number = image_number;
176 std::stringstream ss;
177 if (m_use_generic_name) {
178 char filename[FILENAME_MAX];
179 snprintf(filename, FILENAME_MAX, m_generic_name.c_str(), m_image_number);
180 ss << filename;
181 }
182 else {
183 ss << m_directory << "/" << m_base_name << std::setfill('0') << std::setw(m_number_of_zero) << m_image_number << "."
184 << m_extension;
185 }
186
187 m_image_number_next = m_image_number + m_image_step;
188
189 vpImageIo::read(I, ss.str());
190
191 width = I.getWidth();
192 height = I.getHeight();
193}
194
195void vpDiskGrabber::acquire(vpImage<vpRGBa> &I, long image_number)
196{
197 m_image_number = image_number;
198 std::stringstream ss;
199 if (m_use_generic_name) {
200 char filename[FILENAME_MAX];
201 snprintf(filename, FILENAME_MAX, m_generic_name.c_str(), m_image_number);
202 ss << filename;
203 }
204 else {
205 ss << m_directory << "/" << m_base_name << std::setfill('0') << std::setw(m_number_of_zero) << m_image_number << "."
206 << m_extension;
207 }
208
209 m_image_number_next = m_image_number + m_image_step;
210
211 vpImageIo::read(I, ss.str());
212
213 width = I.getWidth();
214 height = I.getHeight();
215}
216
217void vpDiskGrabber::acquire(vpImage<float> &I, long image_number)
218{
219 m_image_number = m_image_number_next;
220 std::stringstream ss;
221 if (m_use_generic_name) {
222 char filename[FILENAME_MAX];
223 snprintf(filename, FILENAME_MAX, m_generic_name.c_str(), m_image_number);
224 ss << filename;
225 }
226 else {
227 ss << m_directory << "/" << m_base_name << std::setfill('0') << std::setw(m_number_of_zero) << image_number << "."
228 << m_extension;
229 }
230
231 m_image_number_next += m_image_step;
232
233 vpImageIo::readPFM(I, ss.str());
234
235 width = I.getWidth();
236 height = I.getHeight();
237}
238
240
242{
243 m_image_number = number;
244 m_image_number_next = number;
245}
246
247void vpDiskGrabber::setGenericName(const std::string &generic_name)
248{
249 m_generic_name = generic_name;
250 m_use_generic_name = true;
251}
virtual ~vpDiskGrabber()
void open(vpImage< unsigned char > &I)
void setGenericName(const std::string &genericName)
void setImageNumber(long number)
long getImageNumber() const
void acquire(vpImage< unsigned char > &I)
unsigned int height
Number of rows in the image.
bool init
Set to true if the frame grabber has been initialized.
unsigned int width
Number of columns in the image.
static void readPFM(vpImage< float > &I, const std::string &filename)
static void read(vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
Definition of the vpImage class member functions.
Definition vpImage.h:135
unsigned int getWidth() const
Definition vpImage.h:242
unsigned int getHeight() const
Definition vpImage.h:184