topical media & game development

talk show tell print

lib-of-vs-addons-ofxOpenCv-src-ofxCvImage.h / h



  /*
  * ofxCvImage.h
  * by stefanix
  *
  * This is the common abstract base class of all the different
  * image types used in this addon. Methods with "= 0" at the end
  * are pure virtual and need to be implemented by the inheriting
  * image class.
  *
  */
  
  ifndef OFX_CV_IMAGE_H
  define OFX_CV_IMAGE_H
  
  include <ofxCvConstants.h>
  
  class ofxCvGrayscaleImage;
  class ofxCvColorImage;
  class ofxCvFloatImage;
  
  class ofxCvImage : public ofBaseDraws, public ofBaseHasTexture, public ofBaseHasPixels {
      
    public:
  
      int width;                 // DEPRACATED, will be made private, use getWidth() instead !!
      int height;                // DEPRACATED, will be made private, use getHeight() instead !!
          bool bAllocated;
  
      ofxCvImage();
      virtual  ~ofxCvImage();
      virtual void  allocate( int w, int h );
      virtual void  clear();
          virtual float getWidth();        // get width of this image or its ROI width
          virtual float getHeight();       // get height of this image or its ROI height
      virtual void  setUseTexture( bool bUse );
      virtual ofTexture&  getTextureReference();
      virtual void flagImageChanged();  //mostly used internally
      virtual void setUseRoiOffsetWhenDrawing( bool bUse );
  
      
      // ROI - region of interest
      //
      virtual void  pushROI();
      virtual void  popROI();
      virtual void  setROI( int x, int y, int w, int h );
      virtual void  setROI( const ofRectangle& rect );
      virtual ofRectangle  getROI();
      virtual void  resetROI();
      virtual ofRectangle  getIntersectionROI( const ofRectangle& rec1,
                                               const ofRectangle& rec2 );
      
      
      // Set Pixel Data
      //
      virtual void  set( float value ) = 0;
      virtual void  operator -= ( float value );
      virtual void  operator += ( float value );
  
      virtual void  setFromPixels( unsigned char* _pixels, int w, int h ) = 0;
      virtual void  operator = ( const ofxCvGrayscaleImage& mom ) = 0;
      virtual void  operator = ( const ofxCvColorImage& mom ) = 0;
      virtual void  operator = ( const ofxCvFloatImage& mom ) = 0;
      virtual void  operator = ( const IplImage* mom );
      
      virtual void  operator -= ( ofxCvImage& mom );
      virtual void  operator += ( ofxCvImage& mom );
      virtual void  operator *= ( ofxCvImage& mom );
      virtual void  operator &= ( ofxCvImage& mom );
      
  
      // Get Pixel Data
      //
      virtual unsigned char*  getPixels() = 0;
      virtual IplImage*  getCvImage() { return cvImage; };
  
      // Draw Image
      //
      virtual void  draw( float x, float y );
      virtual void  draw( float x, float y, float w, float h );
      virtual void setAnchorPercent( float xPct, float yPct );
      virtual void setAnchorPoint( int x, int y );
      virtual void resetAnchor();
      
      
      // Image Filter Operations
      //
      virtual void  erode( );                     // based on 3x3 shape
      virtual void  dilate( );                    // based on 3x3 shape
      virtual void  blur( int value=3 );          // value = x*2+1, where x is an integer
      virtual void  blurGaussian( int value=3 );  // value = x*2+1, where x is an integer
      virtual void  invert();
      virtual void  contrastStretch() = 0;
      virtual void  convertToRange(float min, float max) = 0;
  
      // Image Transformation Operations
      //
      virtual void  resize( int w, int h ) = 0;
      virtual void  scaleIntoMe( ofxCvImage& mom, int interpolationMethod = CV_INTER_NN ) = 0;
      virtual void  mirror( bool bFlipVertically, bool bFlipHorizontally );
  
      virtual void  translate( float x, float y );
      virtual void  rotate( float angle, float centerX, float centerY );
      virtual void  scale( float scaleX, float sclaeY );
      virtual void  transform( float angle, float centerX, float centerY,
                               float scaleX, float scaleY,
                               float moveX, float moveY );
      
undistort Usage Example: undistort( 0, 1, 0, 0, 200, 200, cwidth/2, cheight/2 ); creates kind of an old TV monitor distortion.

  
      virtual void  undistort( float radialDistX, float radialDistY,
                               float tangentDistX, float tangentDistY,
                               float focalX, float focalY,
                               float centerX, float centerY );
  
      virtual void  remap( IplImage* mapX, IplImage* mapY );
  
      virtual void  warpPerspective( const ofPoint& A, const ofPoint& B,
                                     const ofPoint& C, const ofPoint& D );
      virtual void  warpIntoMe( ofxCvImage& mom,
                                const ofPoint src[4], const ofPoint dst[4] );
  
      // Other Image Operations
      //
      virtual int  countNonZeroInRegion( int x, int y, int w, int h );
  
    protected:
  
      bool pushSetBothToTheirIntersectionROI( ofxCvImage& img1, ofxCvImage& img2 );
  
      virtual void  rangeMap( IplImage* img, float min1, float max1, float min2, float max2 );
                                       
      virtual void swapTemp();  // swap cvImageTemp back
                                // to cvImage after an image operation
                            
      IplImage*  cvImage;
      IplImage*  cvImageTemp;   // this is typically swapped back into cvImage
                                // after an image operation with swapImage()
  
      vector<ofRectangle>  roiStack;      // ROI stack
                                          // last rectangle is used for ROI
                                          // used with pushROI(), popROI()
                                                                        
      int roiX;                 // region of interest offset x
      int roiY;                 // region of interest offset y    
                                
      int ipldepth;             // IPL_DEPTH_8U, IPL_DEPTH_16U, IPL_DEPTH_32F, ...
      int iplchannels;          // 1, 3, 4, ...
  
      int gldepth;              // GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, GL_FLOAT, ...
      int glchannels;           // GL_LUMINANCE, GL_RGB, GL_RGBA, ...
      
      unsigned char*         pixels;          // not width stepped for getPixels(), allocated on demand
      int  pixelsWidth;
      int  pixelsHeight;
      bool bPixelsDirty;        // pixels need to be reloaded
      
      ofTexture  tex;                      // internal tex
      bool bUseTexture;
      bool bTextureDirty;       // texture needs to be reloaded before drawing
      
      bool bUseRoiOffsetWhenDrawing;
      
      ofPoint  anchor;
      bool  bAnchorIsPct;    
  
  };
  
  endif
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.