Visual Servoing Platform
version 3.7.0
Toggle main menu visibility
Loading...
Searching...
No Matches
vpDiskGrabber.cpp
1
/*
2
* ViSP, open source Visual Servoing Platform software.
3
* Copyright (C) 2005 - 2025 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/core/vpIoTools.h>
35
#include <visp3/io/vpDiskGrabber.h>
36
37
BEGIN_VISP_NAMESPACE
38
39
vpDiskGrabber::vpDiskGrabber
()
40
: m_image_number(0), m_image_number_next(0), m_image_step(1), m_number_of_zero(0), m_directory(
"/tmp"
),
41
m_base_name(
"I"
), m_extension(
"pgm"
), m_use_generic_name(false), m_generic_name(
"empty"
)
42
{
43
init
=
false
;
44
}
45
46
vpDiskGrabber::vpDiskGrabber
(
const
vpDiskGrabber
&grabber) :
vpFrameGrabber
(grabber)
47
{
48
*
this
= grabber;
49
}
50
51
vpDiskGrabber
&
vpDiskGrabber::operator=
(
const
vpDiskGrabber
&grabber)
52
{
53
m_image_number = grabber.m_image_number;
54
m_image_number_next = grabber.m_image_number_next;
55
m_image_step = grabber.m_image_step;
56
m_number_of_zero = grabber.m_number_of_zero;
57
m_directory = grabber.m_directory;
58
m_base_name = grabber.m_base_name;
59
m_extension = grabber.m_extension;
60
m_use_generic_name = grabber.m_use_generic_name;
61
m_generic_name = grabber.m_generic_name;
62
63
return
*
this
;
64
}
65
66
vpDiskGrabber::vpDiskGrabber
(
const
std::string &generic_name)
67
: m_image_number(0), m_image_number_next(0), m_image_step(1), m_number_of_zero(0), m_directory(
"/tmp"
),
68
m_base_name(
"I"
), m_extension(
"pgm"
), m_use_generic_name(true), m_generic_name(generic_name)
69
{
70
init
=
false
;
71
}
72
73
vpDiskGrabber::vpDiskGrabber
(
const
std::string &dir,
const
std::string &basename,
long
number,
int
step,
74
unsigned
int
noz,
const
std::string &ext)
75
: m_image_number(number), m_image_number_next(number), m_image_step(step), m_number_of_zero(noz), m_directory(dir),
76
m_base_name(basename), m_extension(ext), m_use_generic_name(false), m_generic_name(
"empty"
), m_image_name()
77
{
78
init
=
false
;
79
}
80
81
void
vpDiskGrabber::open
(
vpImage<unsigned char>
&I)
82
{
83
long
first_number =
getImageNumber
();
84
85
acquire
(I);
86
87
setImageNumber
(first_number);
88
89
width
= I.getWidth();
90
height
= I.getHeight();
91
92
init
=
true
;
93
}
94
95
void
vpDiskGrabber::open
(
vpImage<vpRGBa>
&I)
96
{
97
// First we save the image number, so that it can be reaffected after the
98
// acquisition. That means that the first image is readed twice
99
long
first_number =
getImageNumber
();
100
101
acquire
(I);
102
103
setImageNumber
(first_number);
104
105
width
= I.getWidth();
106
height
= I.getHeight();
107
108
init
=
true
;
109
}
110
111
void
vpDiskGrabber::open
(
vpImage<float>
&I)
112
{
113
// First we save the image number, so that it can be reaffected after the
114
// acquisition. That means that the first image is readed twice
115
long
first_number =
getImageNumber
();
116
117
acquire
(I);
118
119
setImageNumber
(first_number);
120
121
width
= I.getWidth();
122
height
= I.getHeight();
123
124
init
=
true
;
125
}
126
127
void
vpDiskGrabber::acquire
(
vpImage<unsigned char>
&I)
128
{
129
m_image_number = m_image_number_next;
130
131
if
(m_use_generic_name) {
132
m_image_name =
vpIoTools::formatString
(m_generic_name,
static_cast<
unsigned
int
>
(m_image_number));
133
}
134
else
{
135
std::stringstream ss;
136
ss << m_directory <<
"/"
<< m_base_name << std::setfill(
'0'
) << std::setw(m_number_of_zero) << m_image_number <<
"."
137
<< m_extension;
138
m_image_name = ss.str();
139
}
140
141
m_image_number_next += m_image_step;
142
vpImageIo::read
(I, m_image_name);
143
144
width
= I.getWidth();
145
height
= I.getHeight();
146
}
147
148
void
vpDiskGrabber::acquire
(
vpImage<vpRGBa>
&I)
149
{
150
m_image_number = m_image_number_next;
151
152
if
(m_use_generic_name) {
153
m_image_name =
vpIoTools::formatString
(m_generic_name,
static_cast<
unsigned
int
>
(m_image_number));
154
}
155
else
{
156
std::stringstream ss;
157
ss << m_directory <<
"/"
<< m_base_name << std::setfill(
'0'
) << std::setw(m_number_of_zero) << m_image_number <<
"."
158
<< m_extension;
159
m_image_name = ss.str();
160
}
161
162
m_image_number_next += m_image_step;
163
164
vpImageIo::read
(I, m_image_name);
165
166
width
= I.getWidth();
167
height
= I.getHeight();
168
}
169
170
void
vpDiskGrabber::acquire
(
vpImage<float>
&I)
171
{
172
m_image_number = m_image_number_next;
173
174
if
(m_use_generic_name) {
175
m_image_name =
vpIoTools::formatString
(m_generic_name,
static_cast<
unsigned
int
>
(m_image_number));
176
}
177
else
{
178
std::stringstream ss;
179
ss << m_directory <<
"/"
<< m_base_name << std::setfill(
'0'
) << std::setw(m_number_of_zero) << m_image_number <<
"."
180
<< m_extension;
181
m_image_name = ss.str();
182
}
183
184
m_image_number_next += m_image_step;
185
186
std::string extension =
vpIoTools::toLowerCase
(
vpIoTools::getFileExtension
(m_image_name,
true
));
187
188
if
(extension.find(
"npy"
) != std::string::npos) {
189
#if defined (VISP_HAVE_MINIZ) && (VISP_CXX_STANDARD > VISP_CXX_STANDARD_98) && defined(VISP_HAVE_WORKING_REGEX)
190
visp::cnpy::NpyArray
array =
visp::cnpy::npy_load
(m_image_name);
191
float
*data = array.
data
<
float
>();
192
I.init(data,
static_cast<
unsigned
int
>
(array.
shape
[0]),
static_cast<
unsigned
int
>
(array.
shape
[1]),
true
);
193
#else
194
throw
(
vpException
(
vpException::ioError
,
"Miniz is not installed, npy files cannot be read"
));
195
#endif
196
}
197
else
{
198
vpImageIo::read
(I, m_image_name);
199
}
200
201
width
= I.getWidth();
202
height
= I.getHeight();
203
}
204
205
void
vpDiskGrabber::acquire
(
vpImage<unsigned char>
&I,
long
image_number)
206
{
207
m_image_number = image_number;
208
209
if
(m_use_generic_name) {
210
m_image_name =
vpIoTools::formatString
(m_generic_name,
static_cast<
unsigned
int
>
(m_image_number));
211
}
212
else
{
213
std::stringstream ss;
214
ss << m_directory <<
"/"
<< m_base_name << std::setfill(
'0'
) << std::setw(m_number_of_zero) << m_image_number <<
"."
215
<< m_extension;
216
m_image_name = ss.str();
217
}
218
219
m_image_number_next = m_image_number + m_image_step;
220
221
vpImageIo::read
(I, m_image_name);
222
223
width
= I.getWidth();
224
height
= I.getHeight();
225
}
226
227
void
vpDiskGrabber::acquire
(
vpImage<vpRGBa>
&I,
long
image_number)
228
{
229
m_image_number = image_number;
230
231
if
(m_use_generic_name) {
232
m_image_name =
vpIoTools::formatString
(m_generic_name,
static_cast<
unsigned
int
>
(m_image_number));
233
}
234
else
{
235
std::stringstream ss;
236
ss << m_directory <<
"/"
<< m_base_name << std::setfill(
'0'
) << std::setw(m_number_of_zero) << m_image_number <<
"."
237
<< m_extension;
238
m_image_name = ss.str();
239
}
240
241
m_image_number_next = m_image_number + m_image_step;
242
243
vpImageIo::read
(I, m_image_name);
244
245
width
= I.getWidth();
246
height
= I.getHeight();
247
}
248
249
void
vpDiskGrabber::acquire
(
vpImage<float>
&I,
long
image_number)
250
{
251
m_image_number = m_image_number_next;
252
253
if
(m_use_generic_name) {
254
m_image_name =
vpIoTools::formatString
(m_generic_name,
static_cast<
unsigned
int
>
(m_image_number));
255
}
256
else
{
257
std::stringstream ss;
258
ss << m_directory <<
"/"
<< m_base_name << std::setfill(
'0'
) << std::setw(m_number_of_zero) << image_number <<
"."
259
<< m_extension;
260
m_image_name = ss.str();
261
}
262
263
m_image_number_next += m_image_step;
264
265
vpImageIo::readPFM
(I, m_image_name);
266
267
width
= I.getWidth();
268
height
= I.getHeight();
269
}
270
271
void
vpDiskGrabber::setImageNumber
(
long
number)
272
{
273
m_image_number = number;
274
m_image_number_next = number;
275
}
276
277
void
vpDiskGrabber::setGenericName
(
const
std::string &generic_name)
278
{
279
m_generic_name = generic_name;
280
m_use_generic_name =
true
;
281
}
282
283
END_VISP_NAMESPACE
vpDiskGrabber::open
void open(vpImage< unsigned char > &I) VP_OVERRIDE
Definition
vpDiskGrabber.cpp:81
vpDiskGrabber::vpDiskGrabber
vpDiskGrabber()
Definition
vpDiskGrabber.cpp:39
vpDiskGrabber::acquire
void acquire(vpImage< unsigned char > &I) VP_OVERRIDE
Definition
vpDiskGrabber.cpp:127
vpDiskGrabber::setGenericName
void setGenericName(const std::string &genericName)
Definition
vpDiskGrabber.cpp:277
vpDiskGrabber::operator=
vpDiskGrabber & operator=(const vpDiskGrabber &grabber)
Definition
vpDiskGrabber.cpp:51
vpDiskGrabber::setImageNumber
void setImageNumber(long number)
Definition
vpDiskGrabber.cpp:271
vpDiskGrabber::getImageNumber
long getImageNumber() const
Definition
vpDiskGrabber.h:226
vpException
error that can be emitted by ViSP classes.
Definition
vpException.h:60
vpException::ioError
@ ioError
I/O error.
Definition
vpException.h:67
vpFrameGrabber::height
unsigned int height
Number of rows in the image.
Definition
vpFrameGrabber.h:139
vpFrameGrabber::init
bool init
Set to true if the frame grabber has been initialized.
Definition
vpFrameGrabber.h:102
vpFrameGrabber::width
unsigned int width
Number of columns in the image.
Definition
vpFrameGrabber.h:140
vpFrameGrabber::vpFrameGrabber
vpFrameGrabber()
Definition
vpFrameGrabber.h:114
vpImageIo::readPFM
static void readPFM(vpImage< float > &I, const std::string &filename)
Definition
vpImageIo.cpp:1426
vpImageIo::read
static void read(vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
Definition
vpImageIo.cpp:116
vpImage
Definition of the vpImage class member functions.
Definition
vpImage.h:131
vpIoTools::toLowerCase
static std::string toLowerCase(const std::string &input)
Return a lower-case version of the string input . Numbers and special characters stay the same.
Definition
vpIoTools.cpp:1370
vpIoTools::formatString
static std::string formatString(const std::string &name, unsigned int val)
Definition
vpIoTools.cpp:1442
vpIoTools::getFileExtension
static std::string getFileExtension(const std::string &pathname, bool checkFile=false)
Definition
vpIoTools.cpp:1155
BEGIN_VISP_NAMESPACE
Definition
vpMbtDistanceCircle.cpp:55
visp::cnpy::npy_load
VISP_EXPORT NpyArray npy_load(const std::string &fname)
Definition
vpIoTools_npy.cpp:594
visp::cnpy::NpyArray
Definition
vpIoTools.h:99
visp::cnpy::NpyArray::shape
std::vector< size_t > shape
Definition
vpIoTools.h:170
visp::cnpy::NpyArray::data
T * data()
Definition
vpIoTools.h:112
modules
io
src
video
vpDiskGrabber.cpp
Generated by
1.17.0