Image Component Library (ICL)
|
Common interface class for all grabbers. More...
#include <Grabber.h>
Public Types | |
typedef utils::Function< void, const core::ImgBase * > | callback |
new image callback type | |
Public Member Functions | |
Grabber () | |
virtual | ~Grabber () |
Destructor. | |
const core::ImgBase * | grab (core::ImgBase **dst=0) |
grab function calls the Grabber-specific acquireImage-method and applies distortion if necessary | |
template<class T > | |
bool | desiredUsed () const |
returns whether the desired parameter for the given type is used | |
template<class T > | |
void | useDesired (const T &t) |
sets desired parameters (only available for core::depth,utils::Size and core::format) | |
void | useDesired (core::depth d, const utils::Size &size, core::format fmt) |
sets up the grabber to use all given desired parameters | |
template<class T > | |
void | ignoreDesired () |
set the grabber to ignore the desired param of type T | |
void | ignoreDesired () |
sets up the grabber to ignore all desired parameters | |
template<class T > | |
T | getDesired () const |
returns the desired value for the given type T | |
virtual void | registerCallback (callback cb) |
registers a callback that is called each time, a new image is available | |
virtual void | removeAllCallbacks () |
removes all registered image callbacks | |
virtual void | notifyNewImageAvailable (const core::ImgBase *image) |
this function can be implemented by subclasses in order to notify, that a new image is available | |
Static Public Member Functions | |
static std::string | translateSteppingRange (const utils::SteppingRange< double > &range) |
translates a SteppingRange into a string representation | |
static utils::SteppingRange < double > | translateSteppingRange (const std::string &rangeStr) |
creates a SteppingRange out of a string representation | |
static std::string | translateDoubleVec (const std::vector< double > &doubleVec) |
translates a vector of doubles into a string representation | |
static std::vector< double > | translateDoubleVec (const std::string &doubleVecStr) |
creates a vector of doubles out of a string representation | |
static std::string | translateStringVec (const std::vector< std::string > &stringVec) |
translates a vector of strings into a single string representation | |
static std::vector< std::string > | translateStringVec (const std::string &stringVecStr) |
creates a vector of strins out of a single string representation | |
Protected Member Functions | |
virtual void | setDesiredFormatInternal (core::format fmt) |
internally set a desired format | |
virtual void | setDesiredSizeInternal (const utils::Size &size) |
internally set a desired format | |
virtual void | setDesiredDepthInternal (core::depth d) |
internally set a desired format | |
virtual core::format | getDesiredFormatInternal () const |
returns the desired format | |
virtual core::depth | getDesiredDepthInternal () const |
returns the desired format | |
virtual utils::Size | getDesiredSizeInternal () const |
returns the desired format | |
virtual const core::ImgBase * | acquireImage () |
main interface method, that is implemented by the actual grabber instances | |
const core::ImgBase * | adaptGrabResult (const core::ImgBase *src, core::ImgBase **dst) |
Utility function that allows for much easier implementation of grabUD. | |
Private Member Functions | |
void | processPropertyChange (const utils::Configurable::Property &prop) |
callback for changed configurable properties | |
Private Attributes | |
Data * | data |
hidden data | |
Friends | |
class | GrabberHandle |
grant private method access to the grabber handle template | |
class | GenericGrabber |
grant private method access to the GenericGrabber class | |
distortion functions | |
void | enableUndistortion (const std::string &filename) |
enables the undistorion | |
void | enableUndistortion (const ImageUndistortion &udist) |
enables the undistortion plugin for the grabber using radial and tangential distortion parameters | |
void | enableUndistortion (const utils::ProgArg &pa) |
enables undistortion from given programm argument. | |
void | enableUndistortion (const core::Img32f &warpMap) |
enables undistortion for given warp map | |
void | setUndistortionInterpolationMode (core::scalemode mode) |
sets how undistortion is interpolated (supported modes are interpolateNN and interpolateLIN) | |
void | disableUndistortion () |
disables distortion | |
bool | isUndistortionEnabled () const |
returns whether distortion is currently enabled | |
const core::Img32f * | getUndistortionWarpMap () const |
returns the internal warp map or NULL if undistortion is not enabled |
Common interface class for all grabbers.
The Grabber is ICL's common interface for image acquisition tools. A large set of Grabbers is available and wrapped by the GenericGrabber class. We strongly recommend to use the GenericGrabber class for image acquisition within applications.
The Grabber itself has a very short interface for the user: usually, a grabber is instantiated and its grab() method is called to aquire the next available image.
In addition, the Grabber supports a set of so called 'desired-parameters'. These can be set to overwrite the image parameters that are used by the underlying implementation. A FileGrabber e.g. will by default return images that have the same parameter that the grabbed image file provides. However, in some situations, the user might want to adapt these parameters E.g. if the image parameters that are provided by the grabber are not suitable for an algorithm. If this is the case, the Grabber's desired parameters can be set using the Grabber::setDesired-template.
Currently, the image parameters 'core::depth', 'size' and 'core::format' can be adapted seperately by setting desired parameters. Once desired parameters are set, the can be reset to the grabber's default by calling grabber::ignoreDesired<T> where one of the types core::depth, core::format or icl::utils::Size is used as type T.
The Grabber does also provide an interface to set up image undistortion parameters. The can be estimated with ICL's distortion calibration tool. The undistortion operation is accelerated using an internal warp-table. By these means, image undistion is directly applied on the grabbed images, which lets the user then work with undistored images.
In order to implement a new Grabber class, some steps are necessary. First, the new Grabber needs to be implemented. This must implement the Grabber::acquireImage method, that uses an underlying image source to acquire a single new image. This can have any parameters and core::depth (usually, the image parameters are somehow related to the output of the underlying image source). If the grabber is available, one should think about adapting the grabber to inherit the icl::GrabberHandle class that adds the ability of instantiating one Grabber several times without having to handle double device accesses explicitly.
The Grabber implements the Configurable interface that is used to implement dynamically settable properties. Each Grabber must have at least the two properties 'core::format' and 'size'. These are handled in a special way by the automatically created Grabber- property-GUIs available in the ICLQt package.
As a very new experimental features, ICL's Grabber interface provides methods to register callback functions to the grabber that are then called automatically whenever a new image is available. This feature needs to be implemented explicitly for each grabber backend and does sometimes not even make sense. Furthermore, it' could lead to some strange behaviour of the whole application, because the internal image akquisition process is suddenly linked to the further image processing steps directly. This feature should not be used for writing applications that are scheduled by the speed of the internal image aquisition loop. Therefore, images should never be processed in the callback functions that are registred.
So far only a few grabbers provide this feature at all. If it is not provided, the registered callbacks will never be called.
typedef utils::Function<void,const core::ImgBase*> icl::io::Grabber::callback |
new image callback type
virtual icl::io::Grabber::~Grabber | ( | ) | [virtual] |
Destructor.
virtual const core::ImgBase* icl::io::Grabber::acquireImage | ( | ) | [inline, protected, virtual] |
main interface method, that is implemented by the actual grabber instances
This method is defined in the grabber implementation. It acquires a new image using the grabbers specific image acquisition back-end
Reimplemented in icl::io::DCGrabber, icl::io::pylon::PylonGrabber, icl::io::FileGrabber, icl::io::OpenNIGrabber, icl::io::PixelSenseGrabber, icl::io::VideoGrabber, icl::io::RSBGrabber, icl::io::SharedMemoryGrabber, icl::io::OpenCVCamGrabber, icl::io::SwissRangerGrabber, icl::io::OpenCVVideoGrabber, icl::io::ZmqGrabber, icl::io::KinectGrabber, icl::io::V4L2Grabber, icl::io::CreateGrabber, and icl::io::DemoGrabber.
const core::ImgBase* icl::io::Grabber::adaptGrabResult | ( | const core::ImgBase * | src, |
core::ImgBase ** | dst | ||
) | [protected] |
Utility function that allows for much easier implementation of grabUD.
called by the grabbers grab() method
bool icl::io::Grabber::desiredUsed | ( | ) | const [inline] |
returns whether the desired parameter for the given type is used
This method is only available for the type core::depth,icl::utils::Size and core::format
disables distortion
void icl::io::Grabber::enableUndistortion | ( | const std::string & | filename | ) |
enables the undistorion
void icl::io::Grabber::enableUndistortion | ( | const ImageUndistortion & | udist | ) |
enables the undistortion plugin for the grabber using radial and tangential distortion parameters
void icl::io::Grabber::enableUndistortion | ( | const utils::ProgArg & | pa | ) |
enables undistortion from given programm argument.
where first argument is the filename of the xml file and second is the size of picture
void icl::io::Grabber::enableUndistortion | ( | const core::Img32f & | warpMap | ) |
enables undistortion for given warp map
T icl::io::Grabber::getDesired | ( | ) | const [inline] |
returns the desired value for the given type T
This method is only available for core::depth,utils::Size and core::format
virtual core::depth icl::io::Grabber::getDesiredDepthInternal | ( | ) | const [protected, virtual] |
returns the desired format
virtual core::format icl::io::Grabber::getDesiredFormatInternal | ( | ) | const [protected, virtual] |
returns the desired format
virtual utils::Size icl::io::Grabber::getDesiredSizeInternal | ( | ) | const [protected, virtual] |
returns the desired format
const core::Img32f* icl::io::Grabber::getUndistortionWarpMap | ( | ) | const |
returns the internal warp map or NULL if undistortion is not enabled
const core::ImgBase* icl::io::Grabber::grab | ( | core::ImgBase ** | dst = 0 | ) |
grab function calls the Grabber-specific acquireImage-method and applies distortion if necessary
If dst is not NULL, it is exploited and filled with image data
void icl::io::Grabber::ignoreDesired | ( | ) | [inline] |
set the grabber to ignore the desired param of type T
This method is only available for core::depth,utils::Size and core::format
void icl::io::Grabber::ignoreDesired | ( | ) |
sets up the grabber to ignore all desired parameters
bool icl::io::Grabber::isUndistortionEnabled | ( | ) | const |
returns whether distortion is currently enabled
virtual void icl::io::Grabber::notifyNewImageAvailable | ( | const core::ImgBase * | image | ) | [virtual] |
this function can be implemented by subclasses in order to notify, that a new image is available
When this function is called, it will automatically call all callbacks with the given image.
void icl::io::Grabber::processPropertyChange | ( | const utils::Configurable::Property & | prop | ) | [private] |
callback for changed configurable properties
Reimplemented in icl::io::FileGrabber, icl::io::DCGrabber, icl::io::OpenNIGrabber, icl::io::DemoGrabber, icl::io::VideoGrabber, icl::io::RSBGrabber, icl::io::SwissRangerGrabber, icl::io::SharedMemoryGrabber, icl::io::OpenCVCamGrabber, icl::io::CreateGrabber, icl::io::V4L2Grabber, icl::io::KinectGrabber, and icl::io::OpenCVVideoGrabber.
virtual void icl::io::Grabber::registerCallback | ( | callback | cb | ) | [virtual] |
registers a callback that is called each time, a new image is available
This feature must not be implemented by specific grabber implementations. And it is up to the implementation whether the image that is passed to the callback has the "desired parameters" or not. Most likely, an internal image buffer is passed, which does not have the desired paremters. The output image is also usually not undistorted.
virtual void icl::io::Grabber::removeAllCallbacks | ( | ) | [virtual] |
removes all registered image callbacks
virtual void icl::io::Grabber::setDesiredDepthInternal | ( | core::depth | d | ) | [protected, virtual] |
internally set a desired format
virtual void icl::io::Grabber::setDesiredFormatInternal | ( | core::format | fmt | ) | [protected, virtual] |
internally set a desired format
virtual void icl::io::Grabber::setDesiredSizeInternal | ( | const utils::Size & | size | ) | [protected, virtual] |
internally set a desired format
sets how undistortion is interpolated (supported modes are interpolateNN and interpolateLIN)
Please note, that this method has no effect if the undistortion was not enabled before using one of the Grabber::enableUndistortion methods. Furthermore, the setting is lost if the undistortion is deactivated using Grabber::disableUndistortion
static std::string icl::io::Grabber::translateDoubleVec | ( | const std::vector< double > & | doubleVec | ) | [static] |
translates a vector of doubles into a string representation
static std::vector<double> icl::io::Grabber::translateDoubleVec | ( | const std::string & | doubleVecStr | ) | [static] |
creates a vector of doubles out of a string representation
static std::string icl::io::Grabber::translateSteppingRange | ( | const utils::SteppingRange< double > & | range | ) | [static] |
translates a SteppingRange into a string representation
static utils::SteppingRange<double> icl::io::Grabber::translateSteppingRange | ( | const std::string & | rangeStr | ) | [static] |
creates a SteppingRange out of a string representation
static std::string icl::io::Grabber::translateStringVec | ( | const std::vector< std::string > & | stringVec | ) | [static] |
translates a vector of strings into a single string representation
static std::vector<std::string> icl::io::Grabber::translateStringVec | ( | const std::string & | stringVecStr | ) | [static] |
creates a vector of strins out of a single string representation
void icl::io::Grabber::useDesired | ( | const T & | t | ) | [inline] |
sets desired parameters (only available for core::depth,utils::Size and core::format)
void icl::io::Grabber::useDesired | ( | core::depth | d, |
const utils::Size & | size, | ||
core::format | fmt | ||
) |
sets up the grabber to use all given desired parameters
friend class GenericGrabber [friend] |
grant private method access to the GenericGrabber class
friend class GrabberHandle [friend] |
grant private method access to the grabber handle template
Data* icl::io::Grabber::data [private] |
hidden data
Reimplemented in icl::io::OpenCVVideoGrabber.