libvisiontransfer  10.8.0
imageset.cpp
1 /*******************************************************************************
2  * Copyright (c) 2024 Allied Vision Technologies GmbH
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *******************************************************************************/
14 
15 #include <iostream>
16 #include <fstream>
17 #include <stdexcept>
18 #include <cstring>
19 #include "visiontransfer/imageset.h"
20 
21 #ifdef _WIN32
22 #include <winsock2.h>
23 #else
24 #include <arpa/inet.h>
25 #endif
26 
27 using namespace visiontransfer;
28 
29 namespace visiontransfer {
30 
31 // Pimpl (implementation) class
32 
33 class ImageSet::Pimpl {
34 public:
38  Pimpl();
39 
40  Pimpl(const Pimpl& other);
41 
42  ~Pimpl();
43  Pimpl& operator= (Pimpl const& other);
44 
45  void setWidth(int w) {width = w;}
46 
47  void setHeight(int h) {height = h;}
48 
49  void setRowStride(int imageNumber, int stride) {
50  assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
51  rowStride[imageNumber] = stride;
52  }
53 
54  void setPixelFormat(int imageNumber, ImageFormat format) {
55  assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
56  formats[imageNumber] = format;
57  }
58 
59  void setPixelData(int imageNumber, unsigned char* pixelData) {
60  assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
61  data[imageNumber] = pixelData;
62  }
63 
64  void setQMatrix(const float* q) {
65  qMatrix = q;
66  }
67 
68  void setSequenceNumber(unsigned int num) {
69  seqNum = num;
70  }
71 
72  void setTimestamp(int seconds, int microsec) {
73  timeSec = seconds;
74  timeMicrosec = microsec;
75  }
76 
77  void setDisparityRange(int minimum, int maximum) {
78  minDisparity = minimum;
79  maxDisparity = maximum;
80  }
81 
82  void setSubpixelFactor(int subpixFact) {
83  subpixelFactor = subpixFact;
84  }
85 
86  void setImageDisparityPair(bool dispPair);
87 
88  int getWidth() const {return width;}
89 
90  int getHeight() const {return height;}
91 
92  int getRowStride(int imageNumber) const {
93  assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
94  return rowStride[imageNumber];
95  }
96 
97  int getRowStride(ImageType what) const {
98  int idx = getIndexOf(what, true);
99  return getRowStride(idx);
100  }
101 
102  ImageFormat getPixelFormat(int imageNumber) const {
103  assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
104  return formats[imageNumber];
105  }
106 
107  ImageFormat getPixelFormat(ImageType what) const {
108  int idx = getIndexOf(what, true);
109  return getPixelFormat(idx);
110  }
111 
112  unsigned char* getPixelData(int imageNumber) const {
113  assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
114  return data[imageNumber];
115  }
116 
117  unsigned char* getPixelData(ImageType what) const {
118  int idx = getIndexOf(what, true);
119  return getPixelData(idx);
120  }
121 
122  const float* getQMatrix() const {
123  return qMatrix;
124  }
125 
126  unsigned int getSequenceNumber() const {return seqNum;}
127 
128  void getTimestamp(int& seconds, int& microsec) const {
129  seconds = timeSec;
130  microsec = timeMicrosec;
131  }
132 
133  void getDisparityRange(int& minimum, int& maximum) const {
134  minimum = minDisparity;
135  maximum = maxDisparity;
136  }
137 
138  int getSubpixelFactor() const {
139  return subpixelFactor;
140  }
141 
142  void writePgmFile(int imageNumber, const char* fileName) const;
143 
144  void copyTo(ImageSet::Pimpl& dest);
145 
146  int getBytesPerPixel(int imageNumber) const {
147  assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
148  return ImageSet::getBytesPerPixel(formats[imageNumber]);
149  }
150 
151  int getBitsPerPixel(int imageNumber) const {
152  assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
153  return ImageSet::getBitsPerPixel(formats[imageNumber]);
154  }
155 
156  int getBitsPerPixel(ImageType what) const {
157  int idx = getIndexOf(what, true);
158  return getBitsPerPixel(idx);
159  }
160 
161  int getNumberOfImages() const {
162  return numberOfImages;
163  }
164 
165  void setNumberOfImages(int number) {
166  assert(number >= 1 && number <= ImageSet::MAX_SUPPORTED_IMAGES);
167  numberOfImages = number;
168  }
169 
170  ImageType getImageType(int imageNumber) const;
171 
172  int getIndexOf(ImageType what, bool throwIfNotFound=false) const;
173 
174  bool hasImageType(ImageType what) const {
175  return getIndexOf(what) >= 0;
176  }
177 
178  void setIndexOf(ImageType what, int idx);
179 
180 #ifdef CV_MAJOR_VERSION
181 
195  inline void toOpenCVImage(int imageNumber, cv::Mat& dest, bool convertRgbToBgr = true);
196 #endif
197 
198  void setExposureTime(int timeMicrosec) {
199  exposureTime = timeMicrosec;
200  }
201 
202  int getExposureTime() const {
203  return exposureTime;
204  }
205 
206  void setLastSyncPulse(int seconds, int microsec) {
207  lastSyncPulseSec = seconds;
208  lastSyncPulseMicrosec = microsec;
209  }
210 
211  void getLastSyncPulse(int& seconds, int& microsec) const {
212  seconds = lastSyncPulseSec;
213  microsec = lastSyncPulseMicrosec;
214  }
215 
216 private:
217  int width;
218  int height;
219  int rowStride[ImageSet::MAX_SUPPORTED_IMAGES];
220  ImageFormat formats[ImageSet::MAX_SUPPORTED_IMAGES];
221  unsigned char* data[ImageSet::MAX_SUPPORTED_IMAGES];
222  const float* qMatrix;
223  int timeSec;
224  int timeMicrosec;
225  unsigned int seqNum;
226  int minDisparity;
227  int maxDisparity;
228  int subpixelFactor;
229  int* referenceCounter;
230  int numberOfImages;
231 
232  int indexLeftImage;
233  int indexRightImage;
234  int indexDisparityImage;
235  int indexColorImage;
236 
237  int exposureTime;
238  int lastSyncPulseSec;
239  int lastSyncPulseMicrosec;
240 
241  void copyData(ImageSet::Pimpl& dest, const ImageSet::Pimpl& src, bool countRef);
242  void decrementReference();
243 };
244 
245 
246 ImageSet::Pimpl::Pimpl()
247  : width(0), height(0), qMatrix(NULL), timeSec(0), timeMicrosec(0),
248  seqNum(0), minDisparity(0), maxDisparity(0), subpixelFactor(16),
249  referenceCounter(NULL), numberOfImages(2), indexLeftImage(0), indexRightImage(1), indexDisparityImage(-1),
250  indexColorImage(-1), exposureTime(0), lastSyncPulseSec(0), lastSyncPulseMicrosec(0) {
251  for (int i=0; i<ImageSet::MAX_SUPPORTED_IMAGES; ++i) {
252  formats[i] = ImageSet::FORMAT_8_BIT_MONO;
253  data[i] = NULL;
254  rowStride[i] = 0;
255  }
256 }
257 
258 ImageSet::Pimpl::Pimpl(const ImageSet::Pimpl& other) {
259  copyData(*this, other, true);
260 }
261 
262 ImageSet::Pimpl& ImageSet::Pimpl::operator= (ImageSet::Pimpl const& other) {
263  if(&other != this) {
264  decrementReference();
265  copyData(*this, other, true);
266  }
267  return *this;
268 }
269 
270 ImageSet::Pimpl::~Pimpl() {
271  decrementReference();
272 }
273 
274 void ImageSet::Pimpl::copyData(ImageSet::Pimpl& dest, const ImageSet::Pimpl& src, bool countRef) {
275  dest.width = src.width;
276  dest.height = src.height;
277 
278  dest.numberOfImages = src.numberOfImages;
279  for(int i=0; i<ImageSet::MAX_SUPPORTED_IMAGES; i++) {
280  dest.rowStride[i] = src.rowStride[i];
281  dest.formats[i] = src.formats[i];
282  dest.data[i] = src.data[i];
283  }
284 
285  dest.qMatrix = src.qMatrix;
286  dest.timeSec = src.timeSec;
287  dest.timeMicrosec = src.timeMicrosec;
288  dest.seqNum = src.seqNum;
289  dest.minDisparity = src.minDisparity;
290  dest.maxDisparity = src.maxDisparity;
291  dest.subpixelFactor = src.subpixelFactor;
292  dest.referenceCounter = src.referenceCounter;
293  dest.numberOfImages = src.numberOfImages;
294  dest.indexLeftImage = src.indexLeftImage;
295  dest.indexRightImage = src.indexRightImage;
296  dest.indexDisparityImage = src.indexDisparityImage;
297  dest.indexColorImage = src.indexColorImage;
298  dest.exposureTime = src.exposureTime;
299  dest.lastSyncPulseSec = src.lastSyncPulseSec;
300  dest.lastSyncPulseMicrosec = src.lastSyncPulseMicrosec;
301 
302  if(dest.referenceCounter != nullptr && countRef) {
303  (*dest.referenceCounter)++;
304  }
305 }
306 
307 void ImageSet::Pimpl::decrementReference() {
308  if(referenceCounter != nullptr && --(*referenceCounter) == 0) {
309  for (int i=0; i<getNumberOfImages(); ++i) {
310  delete []data[i];
311  data[i] = nullptr;
312  }
313  delete []qMatrix;
314  delete referenceCounter;
315 
316  qMatrix = nullptr;
317  referenceCounter = nullptr;
318  }
319 }
320 
321 void ImageSet::Pimpl::writePgmFile(int imageNumber, const char* fileName) const {
322  if(imageNumber < 0 || imageNumber >= getNumberOfImages()) {
323  throw std::runtime_error("Illegal image number!");
324  }
325 
326  std::fstream strm(fileName, std::ios::out | std::ios::binary);
327 
328  // Write PGM / PBM header
329  int type, maxVal, bytesPerChannel, channels;
330  switch(formats[imageNumber]) {
332  type = 5;
333  maxVal = 255;
334  bytesPerChannel = 1;
335  channels = 1;
336  break;
338  type = 5;
339  maxVal = 4095;
340  bytesPerChannel = 2;
341  channels = 1;
342  break;
344  type = 6;
345  maxVal = 255;
346  bytesPerChannel = 1;
347  channels = 3;
348  break;
349  default:
350  throw std::runtime_error("Illegal pixel format!");
351  }
352 
353  strm << "P" << type << " " << width << " " << height << " " << maxVal << std::endl;
354 
355  // Write image data
356  for(int y = 0; y < height; y++) {
357  for(int x = 0; x < width*channels; x++) {
358  unsigned char* pixel = &data[imageNumber][y*rowStride[imageNumber] + x*bytesPerChannel];
359  if(bytesPerChannel == 2) {
360  // Swap endianess
361  unsigned short swapped = htons(*reinterpret_cast<unsigned short*>(pixel));
362  strm.write(reinterpret_cast<char*>(&swapped), sizeof(swapped));
363  } else {
364  strm.write(reinterpret_cast<char*>(pixel), 1);
365  }
366  }
367  }
368 }
369 
370 void ImageSet::Pimpl::copyTo(ImageSet::Pimpl& dest) {
371  dest.decrementReference();
372  copyData(dest, *this, false);
373 
374  dest.qMatrix = new float[16];
375  memcpy(const_cast<float*>(dest.qMatrix), qMatrix, sizeof(float)*16);
376 
377  for(int i=0; i<getNumberOfImages(); i++) {
378  int bytesPixel = getBytesPerPixel(i);
379 
380  dest.rowStride[i] = width*bytesPixel;
381  dest.data[i] = new unsigned char[height*dest.rowStride[i]];
382 
383  // Convert possibly different row strides
384  for(int y = 0; y < height; y++) {
385  memcpy(&dest.data[i][y*dest.rowStride[i]], &data[i][y*rowStride[i]],
386  dest.rowStride[i]);
387  }
388  }
389 
390  dest.referenceCounter = new int;
391  (*dest.referenceCounter) = 1;
392 }
393 
394 ImageSet::ImageType ImageSet::Pimpl::getImageType(int imageNumber) const {
395  assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
396  if (imageNumber == getIndexOf(ImageSet::ImageType::IMAGE_LEFT)) return ImageSet::ImageType::IMAGE_LEFT;
397  if (imageNumber == getIndexOf(ImageSet::ImageType::IMAGE_RIGHT)) return ImageSet::ImageType::IMAGE_RIGHT;
398  if (imageNumber == getIndexOf(ImageSet::ImageType::IMAGE_DISPARITY)) return ImageSet::ImageType::IMAGE_DISPARITY;
399  if (imageNumber == getIndexOf(ImageSet::ImageType::IMAGE_COLOR)) return ImageSet::ImageType::IMAGE_COLOR;
400  throw std::runtime_error("Invalid image number for getImageType!");
401 }
402 
403 void ImageSet::Pimpl::setImageDisparityPair(bool dispPair) {
404  if (getNumberOfImages() != 2) throw std::runtime_error("setImageDisparityPair is only supported for two-image sets");
405  // Let index assignments directly follow the mode
406  indexLeftImage = 0;
407  indexRightImage = dispPair ? -1 : 1;
408  indexDisparityImage = dispPair ? 1 : -1;
409 }
410 
411 int ImageSet::Pimpl::getIndexOf(ImageType what, bool throwIfNotFound) const {
412  int idx = -1;
413  switch(what) {
414  case ImageSet::IMAGE_LEFT: {
415  idx = indexLeftImage;
416  break;
417  }
418  case ImageSet::IMAGE_RIGHT: {
419  idx = indexRightImage;
420  break;
421  }
422  case ImageSet::IMAGE_DISPARITY: {
423  idx = indexDisparityImage;
424  break;
425  }
426  case ImageSet::IMAGE_COLOR: {
427  idx = indexColorImage;
428  break;
429  }
430  default:
431  throw std::runtime_error("Invalid ImageType for query!");
432  }
433  if (throwIfNotFound && (idx==-1)) throw std::runtime_error("ImageSet does not contain the queried ImageType");
434  return idx;
435 }
436 
437 void ImageSet::Pimpl::setIndexOf(ImageType what, int idx) {
438  switch(what) {
439  case ImageSet::IMAGE_LEFT: {
440  indexLeftImage = idx;
441  break;
442  }
443  case ImageSet::IMAGE_RIGHT: {
444  indexRightImage = idx;
445  break;
446  }
447  case ImageSet::IMAGE_DISPARITY: {
448  indexDisparityImage = idx;
449  break;
450  }
451  case ImageSet::IMAGE_COLOR: {
452  indexColorImage = idx;
453  break;
454  }
455  default:
456  throw std::runtime_error("Invalid ImageType for setIndexOf!");
457  }
458 }
459 
460 //
461 //
462 // API class (externally exported)
463 //
464 //
465 
467 : pimpl(new Pimpl())
468 {
469 }
470 
472 : pimpl(new Pimpl(*(other.pimpl))) {
473 
474 }
475 
476 ImageSet::~ImageSet() {
477  delete pimpl;
478 }
479 
480 ImageSet& ImageSet::operator= (ImageSet const& other) {
481  (*pimpl) = *(other.pimpl);
482  return *this;
483 }
484 
485 void ImageSet::setWidth(int w) {
486  pimpl->setWidth(w);
487 }
488 
489 void ImageSet::setHeight(int h) {
490  pimpl->setHeight(h);
491 }
492 
493 void ImageSet::setRowStride(int imageNumber, int stride) {
494  pimpl->setRowStride(imageNumber, stride);
495 }
496 
497 void ImageSet::setPixelFormat(int imageNumber, ImageSet::ImageFormat format) {
498  pimpl->setPixelFormat(imageNumber, format);
499 }
500 
501 void ImageSet::setPixelData(int imageNumber, unsigned char* pixelData) {
502  pimpl->setPixelData(imageNumber, pixelData);
503 }
504 
505 void ImageSet::setQMatrix(const float* q) {
506  pimpl->setQMatrix(q);
507 }
508 
509 void ImageSet::setSequenceNumber(unsigned int num) {
510  pimpl->setSequenceNumber(num);
511 }
512 
513 void ImageSet::setTimestamp(int seconds, int microsec) {
514  pimpl->setTimestamp(seconds, microsec);
515 }
516 
517 void ImageSet::setDisparityRange(int minimum, int maximum) {
518  pimpl->setDisparityRange(minimum, maximum);
519 }
520 
521 void ImageSet::setSubpixelFactor(int subpixFact) {
522  pimpl->setSubpixelFactor(subpixFact);
523 }
524 
525 void ImageSet::setImageDisparityPair(bool dispPair) {
526  pimpl->setImageDisparityPair(dispPair);
527 }
528 
529 int ImageSet::getWidth() const {
530  return pimpl->getWidth();
531 }
532 
533 int ImageSet::getHeight() const {
534  return pimpl->getHeight();
535 }
536 
537 int ImageSet::getRowStride(int imageNumber) const {
538  return pimpl->getRowStride(imageNumber);
539 }
540 
542  return pimpl->getRowStride(what);
543 }
544 
546  return pimpl->getPixelFormat(imageNumber);
547 }
548 
550  return pimpl->getPixelFormat(what);
551 }
552 
553 unsigned char* ImageSet::getPixelData(int imageNumber) const {
554  return pimpl->getPixelData(imageNumber);
555 }
556 
557 unsigned char* ImageSet::getPixelData(ImageSet::ImageType what) const {
558  return pimpl->getPixelData(what);
559 }
560 
561 const float* ImageSet::getQMatrix() const {
562  return pimpl->getQMatrix();
563 }
564 
565 unsigned int ImageSet::getSequenceNumber() const {
566  return pimpl->getSequenceNumber();
567 }
568 
569 void ImageSet::getTimestamp(int& seconds, int& microsec) const {
570  pimpl->getTimestamp(seconds, microsec);
571 }
572 
573 void ImageSet::getDisparityRange(int& minimum, int& maximum) const {
574  pimpl->getDisparityRange(minimum, maximum);
575 }
576 
578  return pimpl->getSubpixelFactor();
579 }
580 
581 void ImageSet::writePgmFile(int imageNumber, const char* fileName) const {
582  pimpl->writePgmFile(imageNumber, fileName);
583 }
584 
586  pimpl->copyTo(*(dest.pimpl));
587 }
588 
589 int ImageSet::getBytesPerPixel(int imageNumber) const {
590  return pimpl->getBytesPerPixel(imageNumber);
591 }
592 
593 int ImageSet::getBitsPerPixel(int imageNumber) const {
594  return pimpl->getBitsPerPixel(imageNumber);
595 }
596 
598  return pimpl->getBitsPerPixel(what);
599 }
600 
602  return pimpl->getNumberOfImages();
603 }
604 
605 void ImageSet::setNumberOfImages(int number) {
606  pimpl->setNumberOfImages(number);
607 }
608 
610  return pimpl->getImageType(imageNumber);
611 }
612 
613 int ImageSet::getIndexOf(ImageSet::ImageType what, bool throwIfNotFound) const {
614  return pimpl->getIndexOf(what, throwIfNotFound);
615 }
616 
618  return pimpl->hasImageType(what);
619 }
620 
622  pimpl->setIndexOf(what, idx);
623 }
624 
625 #ifdef CV_MAJOR_VERSION
626 inline void ImageSet::toOpenCVImage(int imageNumber, cv::Mat& dest, bool convertRgbToBgr) {
627  pimpl->toOpenCVImage(imageNumber, dest, convertRgbToBgr);
628 }
629 #endif
630 
631 void ImageSet::setExposureTime(int timeMicrosec) {
632  pimpl->setExposureTime(timeMicrosec);
633 }
634 
636  return pimpl->getExposureTime();
637 }
638 
639 void ImageSet::setLastSyncPulse(int seconds, int microsec) {
640  pimpl->setLastSyncPulse(seconds, microsec);
641 }
642 
643 void ImageSet::getLastSyncPulse(int& seconds, int& microsec) const {
644  pimpl->getLastSyncPulse(seconds, microsec);
645 }
646 
647 // static
648 int ImageSet::getBitsPerPixel(ImageFormat format) {
649  switch(format) {
650  case ImageSet::FORMAT_8_BIT_MONO: return 8;
651  case ImageSet::FORMAT_8_BIT_RGB: return 24;
652  case ImageSet::FORMAT_12_BIT_MONO: return 12;
653  default: throw std::runtime_error("Invalid image format!");
654  }
655 }
656 
657 // static
659  switch(format) {
660  case ImageSet::FORMAT_8_BIT_MONO: return 1;
661  case ImageSet::FORMAT_8_BIT_RGB: return 3;
662  case ImageSet::FORMAT_12_BIT_MONO: return 2;
663  default: throw std::runtime_error("Invalid image format!");
664  }
665 }
666 
667 
668 } // namespace
669 
visiontransfer::ImageSet::setDisparityRange
void setDisparityRange(int minimum, int maximum)
Sets the value range for the disparity map contained in this image set.
Definition: imageset.cpp:517
visiontransfer::ImageSet::getHeight
int getHeight() const
Returns the height of each image.
Definition: imageset.cpp:533
visiontransfer::ImageSet::setQMatrix
void setQMatrix(const float *q)
Sets the pointer to the disparity-to-depth mapping matrix q.
Definition: imageset.cpp:505
visiontransfer::ImageSet::toOpenCVImage
void toOpenCVImage(int imageNumber, cv::Mat &dest, bool convertRgbToBgr=true)
Converts one image of the set to an OpenCV image.
Definition: imageset-opencv.h:39
visiontransfer::ImageSet::getWidth
int getWidth() const
Returns the width of each image.
Definition: imageset.cpp:529
visiontransfer::ImageSet::setIndexOf
void setIndexOf(ImageType what, int idx)
Assign an image index to a specified ImageType, -1 to disable.
Definition: imageset.cpp:621
visiontransfer::ImageSet::setExposureTime
void setExposureTime(int timeMicrosec)
Sets the exposure time that was used for capturing the image set.
Definition: imageset.cpp:631
visiontransfer::ImageSet::setTimestamp
void setTimestamp(int seconds, int microsec)
Sets the time at which this image set has been captured.
Definition: imageset.cpp:513
visiontransfer::ImageSet::getRowStride
int getRowStride(int imageNumber) const
Returns the row stride for the pixel data of one image.
Definition: imageset.cpp:537
visiontransfer::ImageSet::getNumberOfImages
int getNumberOfImages() const
Returns the number of images in this set.
Definition: imageset.cpp:601
visiontransfer::ImageSet::setPixelData
void setPixelData(int imageNumber, unsigned char *pixelData)
Sets the pixel data for the given image.
Definition: imageset.cpp:501
visiontransfer::ImageSet::getSubpixelFactor
int getSubpixelFactor() const
Gets the subpixel factor for this image set.
Definition: imageset.cpp:577
visiontransfer::ImageSet::getPixelData
unsigned char * getPixelData(int imageNumber) const
Returns the pixel data for the given image.
Definition: imageset.cpp:553
visiontransfer::ImageSet::setSequenceNumber
void setSequenceNumber(unsigned int num)
Sets the sequence number for this image set.
Definition: imageset.cpp:509
visiontransfer::ImageSet::getIndexOf
int getIndexOf(ImageType what, bool throwIfNotFound=false) const
Returns the index of a specific image type.
Definition: imageset.cpp:613
visiontransfer::ImageSet::copyTo
void copyTo(ImageSet &dest)
Makes a deep copy of this image set.
Definition: imageset.cpp:585
visiontransfer::ImageSet
A set of one to three images, but usually two (the left camera image and the disparity map)....
Definition: imageset.h:50
visiontransfer::ImageSet::FORMAT_8_BIT_RGB
@ FORMAT_8_BIT_RGB
8-bit RGB format
Definition: imageset.h:79
visiontransfer::ImageSet::getBitsPerPixel
int getBitsPerPixel(int imageNumber) const
Returns the number of bits that are required to store one image pixel.
Definition: imageset.cpp:593
visiontransfer::ImageSet::getTimestamp
void getTimestamp(int &seconds, int &microsec) const
Returns the time at which this image set has been captured.
Definition: imageset.cpp:569
visiontransfer::ImageSet::setRowStride
void setRowStride(int imageNumber, int stride)
Sets a new row stride for the pixel data of one image.
Definition: imageset.cpp:493
visiontransfer::ImageSet::writePgmFile
void writePgmFile(int imageNumber, const char *fileName) const
Writes one image of the set to a PGM or PPM file.
Definition: imageset.cpp:581
visiontransfer::ImageSet::getExposureTime
int getExposureTime() const
Gets the exposure time in microseconds that was used for capturing the image set.
Definition: imageset.cpp:635
visiontransfer::ImageSet::getBytesPerPixel
int getBytesPerPixel(int imageNumber) const
Returns the number of bytes that are required to store one image pixel.
Definition: imageset.cpp:589
visiontransfer::ImageSet::ImageType
ImageType
Supported image types.
Definition: imageset.h:97
visiontransfer::ImageSet::ImageFormat
ImageFormat
Image formats that can be transferred.
Definition: imageset.h:74
visiontransfer::ImageSet::getDisparityRange
void getDisparityRange(int &minimum, int &maximum) const
Gets the value range for the disparity map contained in this image set. If the image set does not con...
Definition: imageset.cpp:573
visiontransfer::ImageSet::setHeight
void setHeight(int h)
Sets a new width for both images.
Definition: imageset.cpp:489
visiontransfer::ImageSet::ImageSet
ImageSet()
Default constructor creating an image set with no pixel data.
Definition: imageset.cpp:466
visiontransfer::ImageSet::hasImageType
bool hasImageType(ImageType what) const
Returns whether a left camera image is included in the enabled data.
Definition: imageset.cpp:617
visiontransfer::ImageSet::setPixelFormat
void setPixelFormat(int imageNumber, ImageFormat format)
Sets the pixel format for the given image.
Definition: imageset.cpp:497
visiontransfer::ImageSet::setLastSyncPulse
void setLastSyncPulse(int seconds, int microsec)
Sets the timestamp of the last received sync pulse.
Definition: imageset.cpp:639
visiontransfer::ImageSet::getLastSyncPulse
void getLastSyncPulse(int &seconds, int &microsec) const
Gets the timestamp of the last received sync pulse.
Definition: imageset.cpp:643
visiontransfer::ImageSet::FORMAT_12_BIT_MONO
@ FORMAT_12_BIT_MONO
Definition: imageset.h:83
visiontransfer::ImageSet::FORMAT_8_BIT_MONO
@ FORMAT_8_BIT_MONO
8-bit greyscale format
Definition: imageset.h:76
visiontransfer::ImageSet::IMAGE_COLOR
@ IMAGE_COLOR
3rd color camera for devices where this is supported
Definition: imageset.h:104
visiontransfer::ImageSet::getPixelFormat
ImageFormat getPixelFormat(int imageNumber) const
Returns the pixel format for the given image.
Definition: imageset.cpp:545
visiontransfer::ImageSet::getImageType
ImageType getImageType(int imageNumber) const
Returns the ImageType of the specified channel.
Definition: imageset.cpp:609
visiontransfer::ImageSet::getQMatrix
const float * getQMatrix() const
Returns a pointer to the disparity-to-depth mapping matrix q.
Definition: imageset.cpp:561
visiontransfer::ImageSet::setSubpixelFactor
void setSubpixelFactor(int subpixFact)
Sets the subpixel factor for this image set.
Definition: imageset.cpp:521
visiontransfer::ImageSet::setWidth
void setWidth(int w)
Sets a new width for both images.
Definition: imageset.cpp:485
visiontransfer::ImageSet::setNumberOfImages
void setNumberOfImages(int number)
Sets the number of valid images in this set.
Definition: imageset.cpp:605
visiontransfer::ImageSet::getSequenceNumber
unsigned int getSequenceNumber() const
Returns the sequence number for this image set.
Definition: imageset.cpp:565
Allied Vision