15 #ifndef VISIONTRANSFER_IMAGESET_H
16 #define VISIONTRANSFER_IMAGESET_H
20 #include "visiontransfer/common.h"
22 namespace visiontransfer {
38 class VT_EXPORT ImageSet {
40 static const int MAX_SUPPORTED_IMAGES = 4;
59 enum ImageFormat_Deprecated {
60 FORMAT_8_BIT = FORMAT_8_BIT_MONO,
61 FORMAT_12_BIT = FORMAT_12_BIT_MONO
93 void setWidth(
int w) {width = w;}
98 void setHeight(
int h) {height = h;}
107 void setRowStride(
int imageNumber,
int stride) {
108 assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
109 rowStride[imageNumber] = stride;
119 void setPixelFormat(
int imageNumber, ImageFormat format) {
120 assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
121 formats[imageNumber] = format;
124 #ifndef DOXYGEN_SHOULD_SKIP_THIS
125 DEPRECATED(
"Use setPixelFormat(int, ImageFormat) instead") void setPixelFormat(
int imageNumber, ImageFormat_Deprecated format) {
126 setPixelFormat(imageNumber,
static_cast<ImageFormat
>(format));
137 void setPixelData(
int imageNumber,
unsigned char* pixelData) {
138 assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
139 data[imageNumber] = pixelData;
148 void setQMatrix(
const float* q) {
155 void setSequenceNumber(
unsigned int num) {
166 void setTimestamp(
int seconds,
int microsec) {
168 timeMicrosec = microsec;
178 void setDisparityRange(
int minimum,
int maximum) {
179 minDisparity = minimum;
180 maxDisparity = maximum;
186 void setSubpixelFactor(
int subpixFact) {
187 subpixelFactor = subpixFact;
190 #ifndef DOXYGEN_SHOULD_SKIP_THIS
198 DEPRECATED(
"Only compatible with two-image sets: use setNumberOfImages() and setIndexOf() instead")
199 void setImageDisparityPair(
bool dispPair);
205 int getWidth()
const {
return width;}
210 int getHeight()
const {
return height;}
221 int getRowStride(
int imageNumber)
const {
222 assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
223 return rowStride[imageNumber];
235 int idx = getIndexOf(what,
true);
236 return getRowStride(idx);
248 ImageFormat getPixelFormat(
int imageNumber)
const {
249 assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
250 return formats[imageNumber];
261 ImageFormat getPixelFormat(ImageType what)
const {
262 int idx = getIndexOf(what,
true);
263 return getPixelFormat(idx);
275 unsigned char* getPixelData(
int imageNumber)
const {
276 assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
277 return data[imageNumber];
288 unsigned char* getPixelData(ImageType what)
const {
289 int idx = getIndexOf(what,
true);
290 return getPixelData(idx);
296 const float* getQMatrix()
const {
303 unsigned int getSequenceNumber()
const {
return seqNum;}
312 void getTimestamp(
int& seconds,
int& microsec)
const {
314 microsec = timeMicrosec;
325 void getDisparityRange(
int& minimum,
int& maximum)
const {
326 minimum = minDisparity;
327 maximum = maxDisparity;
333 int getSubpixelFactor()
const {
334 return subpixelFactor;
343 void writePgmFile(
int imageNumber,
const char* fileName)
const;
345 #ifndef DOXYGEN_SHOULD_SKIP_THIS
358 DEPRECATED(
"Only compatible with two-image sets: use hasImageType(ImageSet::IMAGE_DISPARITY) instead")
359 bool isImageDisparityPair()
const {
360 return (getNumberOfImages()==2) && hasImageType(IMAGE_DISPARITY);
375 int getBytesPerPixel(
int imageNumber)
const {
376 assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
377 return getBytesPerPixel(formats[imageNumber]);
386 int getBitsPerPixel(
int imageNumber)
const {
387 assert(imageNumber >= 0 && imageNumber < getNumberOfImages());
388 return getBitsPerPixel(formats[imageNumber]);
391 int getBitsPerPixel(ImageType what)
const {
392 int idx = getIndexOf(what,
true);
393 return getBitsPerPixel(idx);
396 static int getBitsPerPixel(ImageFormat format);
402 static int getBytesPerPixel(ImageFormat format);
407 int getNumberOfImages()
const {
408 return numberOfImages;
414 void setNumberOfImages(
int number) {
415 assert(number >= 1 && number <= MAX_SUPPORTED_IMAGES);
416 numberOfImages = number;
422 ImageType getImageType(
int imageNumber)
const;
432 int getIndexOf(ImageType what,
bool throwIfNotFound=
false)
const;
437 bool hasImageType(ImageType what)
const {
438 return getIndexOf(what) >= 0;
449 void setIndexOf(ImageType what,
int idx);
452 #ifdef CV_MAJOR_VERSION
467 inline void toOpenCVImage(
int imageNumber, cv::Mat& dest,
bool convertRgbToBgr =
true);
475 void setExposureTime(
int timeMicrosec) {
476 exposureTime = timeMicrosec;
485 int getExposureTime()
const {
496 void setLastSyncPulse(
int seconds,
int microsec) {
497 lastSyncPulseSec = seconds;
498 lastSyncPulseMicrosec = microsec;
508 void getLastSyncPulse(
int& seconds,
int& microsec)
const {
509 seconds = lastSyncPulseSec;
510 microsec = lastSyncPulseMicrosec;
517 int rowStride[MAX_SUPPORTED_IMAGES];
518 ImageFormat formats[MAX_SUPPORTED_IMAGES];
519 unsigned char* data[MAX_SUPPORTED_IMAGES];
520 const float* qMatrix;
527 int* referenceCounter;
532 int indexDisparityImage;
536 int lastSyncPulseSec;
537 int lastSyncPulseMicrosec;
540 void decrementReference();
543 #ifndef DOXYGEN_SHOULD_SKIP_THIS
551 #include "visiontransfer/imageset-opencv.h"