Home | History | Annotate | Download | only in highgui
      1 /*M///////////////////////////////////////////////////////////////////////////////////////
      2 //
      3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
      4 //
      5 //  By downloading, copying, installing or using the software you agree to this license.
      6 //  If you do not agree to this license, do not download, install,
      7 //  copy or use the software.
      8 //
      9 //
     10 //                        Intel License Agreement
     11 //                For Open Source Computer Vision Library
     12 //
     13 // Copyright (C) 2000, Intel Corporation, all rights reserved.
     14 // Third party copyrights are property of their respective owners.
     15 //
     16 // Redistribution and use in source and binary forms, with or without modification,
     17 // are permitted provided that the following conditions are met:
     18 //
     19 //   * Redistribution's of source code must retain the above copyright notice,
     20 //     this list of conditions and the following disclaimer.
     21 //
     22 //   * Redistribution's in binary form must reproduce the above copyright notice,
     23 //     this list of conditions and the following disclaimer in the documentation
     24 //     and/or other materials provided with the distribution.
     25 //
     26 //   * The name of Intel Corporation may not be used to endorse or promote products
     27 //     derived from this software without specific prior written permission.
     28 //
     29 // This software is provided by the copyright holders and contributors "as is" and
     30 // any express or implied warranties, including, but not limited to, the implied
     31 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     32 // In no event shall the Intel Corporation or contributors be liable for any direct,
     33 // indirect, incidental, special, exemplary, or consequential damages
     34 // (including, but not limited to, procurement of substitute goods or services;
     35 // loss of use, data, or profits; or business interruption) however caused
     36 // and on any theory of liability, whether in contract, strict liability,
     37 // or tort (including negligence or otherwise) arising in any way out of
     38 // the use of this software, even if advised of the possibility of such damage.
     39 //
     40 //M*/
     41 
     42 #ifndef _HIGH_GUI_
     43 #define _HIGH_GUI_
     44 
     45 #ifndef SKIP_INCLUDES
     46 
     47   #include "cxcore.h"
     48   #if defined WIN32 || defined WIN64
     49     #include <windows.h>
     50   #endif
     51 
     52 #else // SKIP_INCLUDES
     53 
     54   #if defined WIN32 || defined WIN64
     55     #define CV_CDECL __cdecl
     56     #define CV_STDCALL __stdcall
     57   #else
     58     #define CV_CDECL
     59     #define CV_STDCALL
     60   #endif
     61 
     62   #ifndef CV_EXTERN_C
     63     #ifdef __cplusplus
     64       #define CV_EXTERN_C extern "C"
     65       #define CV_DEFAULT(val) = val
     66     #else
     67       #define CV_EXTERN_C
     68       #define CV_DEFAULT(val)
     69     #endif
     70   #endif
     71 
     72   #ifndef CV_EXTERN_C_FUNCPTR
     73     #ifdef __cplusplus
     74       #define CV_EXTERN_C_FUNCPTR(x) extern "C" { typedef x; }
     75     #else
     76       #define CV_EXTERN_C_FUNCPTR(x) typedef x
     77     #endif
     78   #endif
     79 
     80   #ifndef CV_INLINE
     81     #if defined __cplusplus
     82       #define CV_INLINE inline
     83     #elif (defined WIN32 || defined WIN64) && !defined __GNUC__
     84       #define CV_INLINE __inline
     85     #else
     86       #define CV_INLINE static
     87     #endif
     88   #endif /* CV_INLINE */
     89 
     90   #if (defined WIN32 || defined WIN64) && defined CVAPI_EXPORTS
     91     #define CV_EXPORTS __declspec(dllexport)
     92   #else
     93     #define CV_EXPORTS
     94   #endif
     95 
     96   #ifndef CVAPI
     97     #define CVAPI(rettype) CV_EXTERN_C CV_EXPORTS rettype CV_CDECL
     98   #endif
     99 
    100 #endif // SKIP_INCLUDES
    101 
    102 #if defined(_CH_)
    103   #pragma package <chopencv>
    104   #include <chdl.h>
    105   LOAD_CHDL(highgui)
    106 #endif
    107 
    108 #ifdef __cplusplus
    109   extern "C" {
    110 #endif /* __cplusplus */
    111 
    112 #define CV_EVENT_MOUSEMOVE      0
    113 #define CV_EVENT_LBUTTONDOWN    1
    114 #define CV_EVENT_RBUTTONDOWN    2
    115 #define CV_EVENT_MBUTTONDOWN    3
    116 #define CV_EVENT_LBUTTONUP      4
    117 #define CV_EVENT_RBUTTONUP      5
    118 #define CV_EVENT_MBUTTONUP      6
    119 #define CV_EVENT_LBUTTONDBLCLK  7
    120 #define CV_EVENT_RBUTTONDBLCLK  8
    121 #define CV_EVENT_MBUTTONDBLCLK  9
    122 
    123 #define CV_EVENT_FLAG_LBUTTON   1
    124 #define CV_EVENT_FLAG_RBUTTON   2
    125 #define CV_EVENT_FLAG_MBUTTON   4
    126 #define CV_EVENT_FLAG_CTRLKEY   8
    127 #define CV_EVENT_FLAG_SHIFTKEY  16
    128 #define CV_EVENT_FLAG_ALTKEY    32
    129 
    130 
    131 /* 8bit, color or not */
    132 #define CV_LOAD_IMAGE_UNCHANGED  -1
    133 /* 8bit, gray */
    134 #define CV_LOAD_IMAGE_GRAYSCALE   0
    135 /* ?, color */
    136 #define CV_LOAD_IMAGE_COLOR       1
    137 /* any depth, ? */
    138 #define CV_LOAD_IMAGE_ANYDEPTH    2
    139 /* ?, any color */
    140 #define CV_LOAD_IMAGE_ANYCOLOR    4
    141 
    142 /* load image from file
    143   iscolor can be a combination of above flags where CV_LOAD_IMAGE_UNCHANGED
    144   overrides the other flags
    145   using CV_LOAD_IMAGE_ANYCOLOR alone is equivalent to CV_LOAD_IMAGE_UNCHANGED
    146   unless CV_LOAD_IMAGE_ANYDEPTH is specified images are converted to 8bit
    147 */
    148 CVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));
    149 CVAPI(CvMat*) cvLoadImageM( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));
    150 
    151 /* save image to file */
    152 CVAPI(int) cvSaveImage( const char* filename, const CvArr* image );
    153 
    154 #define CV_CVTIMG_FLIP      1
    155 #define CV_CVTIMG_SWAP_RB   2
    156 /* utility function: convert one image to another with optional vertical flip */
    157 CVAPI(void) cvConvertImage( const CvArr* src, CvArr* dst, int flags CV_DEFAULT(0));
    158 
    159 /* wait for key event infinitely (delay<=0) or for "delay" milliseconds */
    160 CVAPI(int) cvWaitKey(int delay CV_DEFAULT(0));
    161 
    162 
    163 /****************************************************************************************\
    164 *                         Working with Video Files and Cameras                           *
    165 \****************************************************************************************/
    166 
    167 /* "black box" capture structure */
    168 typedef struct CvCapture CvCapture;
    169 
    170 /* start capturing frames from video file */
    171 CVAPI(CvCapture*) cvCreateSocketCapture( const char *address, const char* port, int width, int height );
    172 
    173 /* grab a frame, return 1 on success, 0 on fail.
    174   this function is thought to be fast               */
    175 CVAPI(int) cvGrabFrame( CvCapture* capture );
    176 
    177 /* get the frame grabbed with cvGrabFrame(..)
    178   This function may apply some frame processing like
    179   frame decompression, flipping etc.
    180   !!!DO NOT RELEASE or MODIFY the retrieved frame!!! */
    181 CVAPI(IplImage*) cvRetrieveFrame( CvCapture* capture );
    182 
    183 /* Just a combination of cvGrabFrame and cvRetrieveFrame
    184    !!!DO NOT RELEASE or MODIFY the retrieved frame!!!      */
    185 CVAPI(IplImage*) cvQueryFrame( CvCapture* capture );
    186 
    187 /* stop capturing/reading and free resources */
    188 CVAPI(void) cvReleaseCapture( CvCapture** capture );
    189 
    190 #define CV_CAP_PROP_POS_MSEC       0
    191 #define CV_CAP_PROP_POS_FRAMES     1
    192 #define CV_CAP_PROP_POS_AVI_RATIO  2
    193 #define CV_CAP_PROP_FRAME_WIDTH    3
    194 #define CV_CAP_PROP_FRAME_HEIGHT   4
    195 #define CV_CAP_PROP_FPS            5
    196 #define CV_CAP_PROP_FOURCC         6
    197 #define CV_CAP_PROP_FRAME_COUNT    7
    198 #define CV_CAP_PROP_FORMAT         8
    199 #define CV_CAP_PROP_MODE           9
    200 #define CV_CAP_PROP_BRIGHTNESS    10
    201 #define CV_CAP_PROP_CONTRAST      11
    202 #define CV_CAP_PROP_SATURATION    12
    203 #define CV_CAP_PROP_HUE           13
    204 #define CV_CAP_PROP_GAIN          14
    205 #define CV_CAP_PROP_CONVERT_RGB   15
    206 
    207 
    208 /* retrieve or set capture properties */
    209 CVAPI(double) cvGetCaptureProperty( CvCapture* capture, int property_id );
    210 CVAPI(int)    cvSetCaptureProperty( CvCapture* capture, int property_id, double value );
    211 
    212 /****************************************************************************************\
    213 *                              Obsolete functions/synonyms                               *
    214 \****************************************************************************************/
    215 
    216 #ifndef HIGHGUI_NO_BACKWARD_COMPATIBILITY
    217     #define HIGHGUI_BACKWARD_COMPATIBILITY
    218 #endif
    219 
    220 #ifdef HIGHGUI_BACKWARD_COMPATIBILITY
    221 
    222 #define cvCaptureFromFile cvCreateFileCapture
    223 #define cvCaptureFromCAM cvCreateCameraCapture
    224 #define cvCaptureFromAVI cvCaptureFromFile
    225 #define cvCreateAVIWriter cvCreateVideoWriter
    226 #define cvWriteToAVI cvWriteFrame
    227 #define cvAddSearchPath(path)
    228 #define cvvInitSystem cvInitSystem
    229 #define cvvNamedWindow cvNamedWindow
    230 #define cvvResizeWindow cvResizeWindow
    231 #define cvvDestroyWindow cvDestroyWindow
    232 #define cvvCreateTrackbar cvCreateTrackbar
    233 #define cvvLoadImage(name) cvLoadImage((name),1)
    234 #define cvvSaveImage cvSaveImage
    235 #define cvvAddSearchPath cvAddSearchPath
    236 #define cvvWaitKey(name) cvWaitKey(0)
    237 #define cvvWaitKeyEx(name,delay) cvWaitKey(delay)
    238 #define cvvConvertImage cvConvertImage
    239 #define HG_AUTOSIZE CV_WINDOW_AUTOSIZE
    240 #define set_preprocess_func cvSetPreprocessFuncWin32
    241 #define set_postprocess_func cvSetPostprocessFuncWin32
    242 
    243 #ifdef WIN32
    244 
    245 typedef int (CV_CDECL * CvWin32WindowCallback)(HWND, UINT, WPARAM, LPARAM, int*);
    246 CVAPI(void) cvSetPreprocessFuncWin32( CvWin32WindowCallback on_preprocess );
    247 CVAPI(void) cvSetPostprocessFuncWin32( CvWin32WindowCallback on_postprocess );
    248 
    249 CV_INLINE int iplWidth( const IplImage* img );
    250 CV_INLINE int iplWidth( const IplImage* img )
    251 {
    252     return !img ? 0 : !img->roi ? img->width : img->roi->width;
    253 }
    254 
    255 CV_INLINE int iplHeight( const IplImage* img );
    256 CV_INLINE int iplHeight( const IplImage* img )
    257 {
    258     return !img ? 0 : !img->roi ? img->height : img->roi->height;
    259 }
    260 
    261 #endif
    262 
    263 #endif /* obsolete functions */
    264 
    265 /* For use with Win32 */
    266 #ifdef WIN32
    267 
    268 CV_INLINE RECT NormalizeRect( RECT r );
    269 CV_INLINE RECT NormalizeRect( RECT r )
    270 {
    271     int t;
    272 
    273     if( r.left > r.right )
    274     {
    275         t = r.left;
    276         r.left = r.right;
    277         r.right = t;
    278     }
    279 
    280     if( r.top > r.bottom )
    281     {
    282         t = r.top;
    283         r.top = r.bottom;
    284         r.bottom = t;
    285     }
    286 
    287     return r;
    288 }
    289 
    290 CV_INLINE CvRect RectToCvRect( RECT sr );
    291 CV_INLINE CvRect RectToCvRect( RECT sr )
    292 {
    293     sr = NormalizeRect( sr );
    294     return cvRect( sr.left, sr.top, sr.right - sr.left, sr.bottom - sr.top );
    295 }
    296 
    297 CV_INLINE RECT CvRectToRect( CvRect sr );
    298 CV_INLINE RECT CvRectToRect( CvRect sr )
    299 {
    300     RECT dr;
    301     dr.left = sr.x;
    302     dr.top = sr.y;
    303     dr.right = sr.x + sr.width;
    304     dr.bottom = sr.y + sr.height;
    305 
    306     return dr;
    307 }
    308 
    309 CV_INLINE IplROI RectToROI( RECT r );
    310 CV_INLINE IplROI RectToROI( RECT r )
    311 {
    312     IplROI roi;
    313     r = NormalizeRect( r );
    314     roi.xOffset = r.left;
    315     roi.yOffset = r.top;
    316     roi.width = r.right - r.left;
    317     roi.height = r.bottom - r.top;
    318     roi.coi = 0;
    319 
    320     return roi;
    321 }
    322 
    323 #endif /* WIN32 */
    324 
    325 #ifdef __cplusplus
    326 }  /* end of extern "C" */
    327 #endif /* __cplusplus */
    328 
    329 
    330 #if defined __cplusplus && (!defined WIN32 || !defined (__GNUC__)) && !defined CV_NO_CVV_IMAGE
    331 
    332 #define CImage CvvImage
    333 
    334 /* CvvImage class definition */
    335 class CV_EXPORTS CvvImage
    336 {
    337 public:
    338     CvvImage();
    339     virtual ~CvvImage();
    340 
    341     /* Create image (BGR or grayscale) */
    342     virtual bool  Create( int width, int height, int bits_per_pixel, int image_origin = 0 );
    343 
    344     /* Load image from specified file */
    345     virtual bool  Load( const char* filename, int desired_color = 1 );
    346 
    347     /* Load rectangle from the file */
    348     virtual bool  LoadRect( const char* filename,
    349                             int desired_color, CvRect r );
    350 
    351 #ifdef WIN32
    352     virtual bool  LoadRect( const char* filename,
    353                             int desired_color, RECT r )
    354     {
    355         return LoadRect( filename, desired_color,
    356                          cvRect( r.left, r.top, r.right - r.left, r.bottom - r.top ));
    357     }
    358 #endif
    359 
    360     /* Save entire image to specified file. */
    361     virtual bool  Save( const char* filename );
    362 
    363     /* Get copy of input image ROI */
    364     virtual void  CopyOf( CvvImage& image, int desired_color = -1 );
    365     virtual void  CopyOf( IplImage* img, int desired_color = -1 );
    366 
    367     IplImage* GetImage() { return m_img; };
    368     virtual void  Destroy(void);
    369 
    370     /* width and height of ROI */
    371     int Width() { return !m_img ? 0 : !m_img->roi ? m_img->width : m_img->roi->width; };
    372     int Height() { return !m_img ? 0 : !m_img->roi ? m_img->height : m_img->roi->height;};
    373     int Bpp() { return m_img ? (m_img->depth & 255)*m_img->nChannels : 0; };
    374 
    375     virtual void  Fill( int color );
    376 
    377 
    378 protected:
    379 
    380     IplImage*  m_img;
    381 };
    382 
    383 #endif /* __cplusplus */
    384 
    385 #endif /* _HIGH_GUI_ */
    386