3dpcp/.svn/pristine/ef/ef8ab857424b61c353b889a2f38e9ac48cb190b7.svn-base
2012-09-16 14:33:11 +02:00

97 lines
2.8 KiB
Text

/**
* @file cvpmd.h
* @brief pmdaccess wrappers, PMD -> OpenCV marshalling and a bit of math.
* @author Stanislav `Cfr` Serebryakov
*/
#pragma once
#include "pmdsdk2.h"
#include <cxcore.h>
/**
* @brief Structure for PMD IO, see initPMD.
*/
typedef struct PMD {
PMDHandle hnd; /**< handle for pmd IO */
float *data; /**< image quering buffer */
PMDDataDescription dd; /**< contains image size, integration time, etc */
} PMD;
/**
* PMD Constructor
* @param *plugin IO plugin name i.e. o3d.L32.pcp
* @param *ip PMD camera IP address
* @return initialized PMD struct
*/
PMD *initPMD(const char* plugin, const char *ip);
/**
* Destructor
*/
void releasePMD(PMD **pmd);
/**
* Returns pointer to the data (used to save float data for offline mode)
*/
float *pmdDataPtr(PMD *p);
/**
* Converts PMD data (stored in PMD struct) to provided IplImage (new will be created if NULL passed)
* @param *p initialized PMD struct with grabbed data (i.e. pmdGetIntensities(p->hnd, p->data, p->dd.std.numColumns * p->dd.std.numRows * sizeof(float)))
* @param *img destination IplImage (default: 0, new one will be created)
* @return generated IplImage
*/
IplImage *toIplImage(const PMD *p, IplImage *img);
/**
* Converts PMD distance point to cartesian coords with intrinsic matrix
* @param uv PMD depth point coords (row, col) //FIXME: order!
* @param dist PMD distance for given point
* @param intrinsicMatrix PMD camera' intrinsic matrix (from calibration)
* @return 3D Point in OpenCV format (CvPoint3D32f)
*/
CvPoint3D32f *cvProjectArrayToCartesian( const CvMat *intrinsicMatrix
, const CvPoint2D32f *pts, const int ptsCnt
, CvPoint3D32f *unitVs);
CvPoint3D32f **pmdProjectArrayToCartesian(const PMD *p, const CvMat *intrinsicMatrix, CvPoint3D32f **pts);
/**
* Get pmd camera' image size
* @param *p initialized PMD struct
* @return image size in OpenCV format (CvSize)
*/
CvSize pmdGetSize(const PMD *p);
/**
* Query PMD inrensities image. Dont forget to call pmdUpdate before quering!
* @param *p initialized PMD struct
* @param *img destination IplImage (defaul: 0, new one will be created if null passed)
* @return image in OpenCV format (IplImage)
*/
IplImage *pmdQueryImage(PMD *p, IplImage *img);
IplImage *pmdQueryImageAsync(PMD *p, IplImage *img);
/**
* Store PMD distances (inside p->data)
*/
void pmdRetriveDistances(PMD *p);
void pmdRetriveDistancesAsync(PMD *p);
/**
* Query PMD distance image in OpenCV format
*/
IplImage *pmdQueryDistances(PMD *p, IplImage *img);
IplImage *pmdQueryDistancesAsync(PMD *p, IplImage *img);
/**
* Query PMD aplitudes image in OpenCV format (might be used as belief measure)
*/
IplImage *pmdQueryAmplitudes(PMD *p, IplImage *img);
IplImage *pmdQueryAmplitudesAsync(PMD *p, IplImage *img);