16 const std::string &group,
17 const std::string &container,
24 const std::string &group,
25 const std::string &container,
30 for(
auto elem : *buffer)
32 this->
template save(g, elem.first, elem.second);
38 const std::string &groupName,
39 const std::string &datasetName,
40 const cv::Mat &img)
const
48 const char* interlace =
"INTERLACE_PIXEL";
52 if(img.type() == CV_8U)
54 if(group.
exist(datasetName))
56 H5Ldelete(group.
getId(), datasetName.data(), H5P_DEFAULT);
58 H5IMmake_image_8bit(group.
getId(), datasetName.c_str(), w, h, img.data);
60 else if(img.type() == CV_8UC3)
62 if(group.
exist(datasetName))
64 H5Ldelete(group.
getId(), datasetName.data(), H5P_DEFAULT);
67 H5IMmake_image_24bit(group.
getId(), datasetName.c_str(), w, h, interlace, img.data);
76 std::vector<size_t> dims = {
static_cast<size_t>(img.rows),
static_cast<size_t>(img.cols)};
77 std::vector<hsize_t> chunkSizes = {
static_cast<hsize_t
>(img.rows),
static_cast<hsize_t
>(img.cols)};
79 if(img.channels() > 1)
81 dims.push_back(img.channels());
82 chunkSizes.push_back(img.channels());
105 const int SCTYPE = img.type() % 8;
110 std::unique_ptr<HighFive::DataSet> dataset = hdf5util::createDataset<unsigned char>(
111 group, datasetName, dataSpace, properties
113 const unsigned char* ptr =
reinterpret_cast<unsigned char*
>(img.data);
116 else if(SCTYPE == CV_8S)
118 std::unique_ptr<HighFive::DataSet> dataset = hdf5util::createDataset<char>(
119 group, datasetName, dataSpace, properties
121 const char* ptr =
reinterpret_cast<char*
>(img.data);
124 else if(SCTYPE == CV_16U)
126 std::unique_ptr<HighFive::DataSet> dataset = hdf5util::createDataset<unsigned short>(
127 group, datasetName, dataSpace, properties
129 const unsigned short* ptr =
reinterpret_cast<unsigned short*
>(img.data);
132 else if(SCTYPE == CV_16S)
134 std::unique_ptr<HighFive::DataSet> dataset = hdf5util::createDataset<short>(
135 group, datasetName, dataSpace, properties
137 const short* ptr =
reinterpret_cast<short*
>(img.data);
140 else if(SCTYPE == CV_32S)
142 std::unique_ptr<HighFive::DataSet> dataset = hdf5util::createDataset<int>(
143 group, datasetName, dataSpace, properties
145 const int* ptr =
reinterpret_cast<int*
>(img.data);
148 else if(SCTYPE == CV_32F)
150 std::unique_ptr<HighFive::DataSet> dataset = hdf5util::createDataset<float>(
151 group, datasetName, dataSpace, properties
153 const float* ptr =
reinterpret_cast<float*
>(img.data);
156 else if(SCTYPE == CV_64F)
158 std::unique_ptr<HighFive::DataSet> dataset = hdf5util::createDataset<double>(
159 group, datasetName, dataSpace, properties
161 const double* ptr =
reinterpret_cast<double*
>(img.data);
166 std::cout <<
timestamp <<
"HDF5Kernel:SaveImage: Warning: unknown opencv type " << img.type() << std::endl;
174 throw std::runtime_error(
"[Hdf5IO - ChannelIO]: Hdf5 file not open.");
179 const std::string &group,
180 const std::string &metaName,
181 const YAML::Node &node)
const
183 cout <<
"SaveMetaYAML: " << group <<
" / " << metaName << std::endl;
186 if(hg.
isValid() && node[
"sensor_type"] )
188 std::string sensor_type = node[
"sensor_type"].as<std::string>();
189 if(sensor_type ==
"ScanPosition")
194 else if(sensor_type ==
"Scan")
198 else if(sensor_type ==
"ScanCamera")
202 else if(sensor_type ==
"ScanProject")
206 else if(sensor_type ==
"HyperspectralCamera")
210 else if(sensor_type ==
"HyperspectralPanoramaChannel")
217 <<
"HDF5Kernel::SaveMetaYAML(): Warning: Sensor type '"
218 << sensor_type <<
"' is not defined." << std::endl;
225 const std::string &group,
226 const std::string container)
const
232 const std::string &group,
233 const std::string &container)
const
247 std::unique_ptr<HighFive::DataSet> dataset;
250 dataset = std::make_unique<HighFive::DataSet>(
260 boost::optional<PointBuffer::val_type> opt_vchannel
261 = this->
template load<PointBuffer::val_type>(group, name);
283 const std::string &groupName,
284 const std::string &datasetName)
const
286 boost::optional<cv::Mat> ret;
291 if(group.
exist(datasetName))
293 if(H5IMis_image(group.
getId(), datasetName.c_str()))
295 long long unsigned int w, h, planes;
299 int err = H5IMget_image_info(group.
getId(), datasetName.c_str(), &w, &h, &planes, interlace, &npals);
303 ret = cv::Mat(h, w, CV_8U);
304 H5IMread_image(group.
getId(), datasetName.c_str(), ret->data);
305 }
else if(planes == 3) {
307 ret = cv::Mat(h, w, CV_8UC3);
308 H5IMread_image(group.
getId(), datasetName.c_str(), ret->data);
322 ret = createMat<unsigned char>(dims);
323 dataset.
read(
reinterpret_cast<unsigned char*
>(ret->data));
325 ret = createMat<char>(dims);
326 dataset.
read(
reinterpret_cast<char*
>(ret->data));
328 ret = createMat<unsigned short>(dims);
329 dataset.
read(
reinterpret_cast<unsigned short*
>(ret->data));
331 ret = createMat<short>(dims);
332 dataset.
read(
reinterpret_cast<short*
>(ret->data));
334 ret = createMat<int>(dims);
335 dataset.
read(
reinterpret_cast<int*
>(ret->data));
337 ret = createMat<float>(dims);
338 dataset.
read(
reinterpret_cast<float*
>(ret->data));
340 ret = createMat<double>(dims);
341 dataset.
read(
reinterpret_cast<double*
>(ret->data));
343 std::cout <<
timestamp <<
"HDF5Kernel::loadImage(): Warning: Could'nt load blob. Datatype unkown." << std::endl;
351 throw std::runtime_error(
"[Hdf5 - ImageIO]: Hdf5 file not open.");
364 const std::string &group,
365 const std::string &container,
366 YAML::Node& node)
const
370 if(hg.
isValid() && node[
"sensor_type"] )
373 std::string sensor_type = node[
"sensor_type"].as<std::string>();
374 if(sensor_type ==
"ScanPosition")
378 else if(sensor_type ==
"Scan")
382 else if(sensor_type ==
"ScanCamera")
386 else if(sensor_type ==
"ScanProject")
390 else if(sensor_type ==
"HyperspectralCamera")
394 else if(sensor_type ==
"HyperspectralPanoramaChannel")
401 <<
"HDF5Kernel::LoadMetaYAML(): Warning: Sensor type '"
402 << sensor_type <<
"' is not defined." << std::endl;
409 <<
"HDF5Kernel::loadMetaYAML(): Warning: Sensor type field missing."
415 const std::string &group,
416 const std::string &container,
417 std::vector<size_t> &dims)
const
419 return this->
template loadArray<unsigned char>(group, container, dims);
423 const std::string &group,
424 const std::string &container,
425 std::vector<size_t> &dims)
const
427 return this->
template loadArray<float>(group, container, dims);
431 const std::string &group,
432 const std::string &container,
433 std::vector<size_t> &dims)
const
435 return this->
template loadArray<double>(group, container, dims);
439 const std::string &groupName,
440 const std::string &datasetName,
441 const std::vector<size_t> &dimensions,
442 const boost::shared_array<float> &data)
const
444 this->
template saveArray<float>(groupName, datasetName, dimensions, data);
448 const std::string &groupName,
const std::string &datasetName,
449 const std::vector<size_t> &dimensions,
450 const boost::shared_array<double> &data)
const
452 this->
template saveArray<double>(groupName, datasetName, dimensions, data);
456 const std::string &groupName,
const std::string &datasetName,
457 const std::vector<size_t> &dimensions,
458 const boost::shared_array<unsigned char> &data)
const
460 this->
template saveArray<unsigned char>(groupName, datasetName, dimensions, data);
488 return getChannel<float>(group, name, channel);
494 return getChannel<unsigned int>(group, name, channel);
500 return getChannel<unsigned char>(group, name, channel);
506 return addChannel<float>(group, name, channel);
512 return addChannel<unsigned int>(group, name, channel);
518 return addChannel<unsigned char>(group, name, channel);