highgui.h

Package [view]: avitobmp.rar
Upload User: ythaiming
Upload Date: 2008-01-15
Package Size: 16176k
Code Size: 13k
Category: Video Capture
Development Platform: Visual C++
  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. #ifndef _HIGH_GUI_
  42. #define _HIGH_GUI_
  43. #include "cxcore.h"
  44. #ifdef WIN32
  45. #include <windows.h>
  46. #endif
  47. #if defined(_CH_)
  48. #pragma package <opencv>
  49. #include <chdl.h>
  50. LOAD_CHDL_CODE(highgui,Highgui)
  51. #endif
  52. #ifdef __cplusplus
  53. extern "C" {
  54. #endif /* __cplusplus */
  55. typedef void (CV_CDECL *CvTrackbarCallback)(int pos);
  56. typedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags);
  57. /****************************************************************************************
  58. *                                Basic HighGUI functionality                             *
  59. ****************************************************************************************/
  60. /* this function is used to set some external parameters in case of X Window */
  61. CVAPI(int) cvInitSystem( int argc, char** argv );
  62. #define CV_WINDOW_AUTOSIZE  1
  63. /* create window */
  64. CVAPI(int) cvNamedWindow( const char* name, int flags );
  65. /* display image within window (highgui windows remember their content) */
  66. CVAPI(void) cvShowImage( const char* name, const CvArr* image );
  67. /* resize/move window */
  68. CVAPI(void) cvResizeWindow( const char* name, int width, int height );
  69. CVAPI(void) cvMoveWindow( const char* name, int x, int y );
  70. /* destroy window and all the trackers associated with it */
  71. CVAPI(void) cvDestroyWindow( const char* name );
  72. CVAPI(void) cvDestroyAllWindows(void);
  73. /* get native window handle (HWND in case of Win32 and Widget in case of X Window) */
  74. CVAPI(void*) cvGetWindowHandle( const char* name );
  75. /* get name of highgui window given its native handle */
  76. CVAPI(const char*) cvGetWindowName( void* window_handle );
  77. /* create trackbar and display it on top of given window, set callback */
  78. CVAPI(int) cvCreateTrackbar( const char* trackbar_name, const char* window_name,
  79.                                   int* value, int count, CvTrackbarCallback on_change );
  80. /* retrieve or set trackbar position */
  81. CVAPI(int) cvGetTrackbarPos( const char* trackbar_name, const char* window_name );
  82. CVAPI(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos );
  83. #define CV_EVENT_MOUSEMOVE      0
  84. #define CV_EVENT_LBUTTONDOWN    1
  85. #define CV_EVENT_RBUTTONDOWN    2
  86. #define CV_EVENT_MBUTTONDOWN    3
  87. #define CV_EVENT_LBUTTONUP      4
  88. #define CV_EVENT_RBUTTONUP      5
  89. #define CV_EVENT_MBUTTONUP      6
  90. #define CV_EVENT_LBUTTONDBLCLK  7
  91. #define CV_EVENT_RBUTTONDBLCLK  8
  92. #define CV_EVENT_MBUTTONDBLCLK  9
  93. #define CV_EVENT_FLAG_LBUTTON   1
  94. #define CV_EVENT_FLAG_RBUTTON   2
  95. #define CV_EVENT_FLAG_MBUTTON   4
  96. #define CV_EVENT_FLAG_CTRLKEY   8
  97. #define CV_EVENT_FLAG_SHIFTKEY  16
  98. #define CV_EVENT_FLAG_ALTKEY    32
  99. /* assign callback for mouse events */
  100. CVAPI(void) cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse );
  101. /*load image from file 
  102.   iscolor: >0 - output image is always color,
  103.             0 - output image is always grayscale,
  104.            <0 - output image is color or grayscale dependending on the file */
  105. CVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(1));
  106. /* save image to file */
  107. CVAPI(int) cvSaveImage( const char* filename, const CvArr* image );
  108. #define CV_CVTIMG_FLIP      1
  109. #define CV_CVTIMG_SWAP_RB   2 
  110. /* utility function: convert one image to another with optional vertical flip */
  111. CVAPI(void) cvConvertImage( const CvArr* src, CvArr* dst, int flags CV_DEFAULT(0));
  112. /* wait for key event infinitely (delay<=0) or for "delay" milliseconds */
  113. CVAPI(int) cvWaitKey(int delay CV_DEFAULT(0));
  114. /****************************************************************************************
  115. *                         Working with Video Files and Cameras                           *
  116. ****************************************************************************************/
  117. /* "black box" capture structure */
  118. typedef struct CvCapture CvCapture;
  119. /* start capturing frames from video file */
  120. CVAPI(CvCapture*) cvCaptureFromFile( const char* filename );
  121. /* start capturing frames from camera */
  122. CVAPI(CvCapture*) cvCaptureFromCAM( int index );
  123. /*just grab frame, return 1 if success, 0 if fail 
  124.   this function is thought to be fast               */  
  125. CVAPI(int) cvGrabFrame( CvCapture* capture );
  126. /*get frame grabbed with cvGrabFrame(..) 
  127.   This function may apply some frame processing like 
  128.   frame decompression, flipping etc.
  129.   !!!DO NOT RELEASE or MODIFY the retrieved frame!!! */
  130. CVAPI(IplImage*) cvRetrieveFrame( CvCapture* capture );
  131. /* Just a combination of cvGrabFrame and cvRetrieveFrame
  132.    !!!DO NOT RELEASE or MODIFY the retrieved frame!!!      */
  133. CVAPI(IplImage*) cvQueryFrame( CvCapture* capture );
  134. /* stop capturing/reading and free resources */
  135. CVAPI(void) cvReleaseCapture( CvCapture** capture );
  136. #define CV_CAP_PROP_POS_MSEC       0
  137. #define CV_CAP_PROP_POS_FRAMES     1
  138. #define CV_CAP_PROP_POS_AVI_RATIO  2
  139. #define CV_CAP_PROP_FRAME_WIDTH    3
  140. #define CV_CAP_PROP_FRAME_HEIGHT   4
  141. #define CV_CAP_PROP_FPS            5
  142. #define CV_CAP_PROP_FOURCC         6
  143. #define CV_CAP_PROP_FRAME_COUNT    7 
  144. /* retrieve or set capture properties */
  145. CVAPI(double) cvGetCaptureProperty( CvCapture* capture, int property_id );
  146. CVAPI(int)    cvSetCaptureProperty( CvCapture* capture, int property_id, double value );
  147. /* "black box" video file writer structure */
  148. typedef struct CvVideoWriter CvVideoWriter;
  149. #define CV_FOURCC(c1,c2,c3,c4)  
  150.     (((c1)&255) + (((c2)&255)<<8) + (((c3)&255)<<16) + (((c4)&255)<<24))
  151. /* initialize video file writer */
  152. CVAPI(CvVideoWriter*) cvCreateVideoWriter( const char* filename, int fourcc,
  153.                                            double fps, CvSize frame_size );
  154. /* write frame to video file */
  155. CVAPI(int) cvWriteFrame( CvVideoWriter* writer, const IplImage* image );
  156. /* close video file writer */
  157. CVAPI(void) cvReleaseVideoWriter( CvVideoWriter** writer );
  158. /****************************************************************************************
  159. *                              Obsolete functions/synonyms                               *
  160. ****************************************************************************************/
  161. #ifndef HIGHGUI_NO_BACKWARD_COMPATIBILITY
  162.     #define HIGHGUI_BACKWARD_COMPATIBILITY
  163. #endif
  164. #ifdef HIGHGUI_BACKWARD_COMPATIBILITY
  165. #define cvCaptureFromAVI cvCaptureFromFile
  166. #define cvCreateAVIWriter cvCreateVideoWriter
  167. #define cvWriteToAVI cvWriteFrame
  168. #define cvAddSearchPath(path)
  169. #define cvvInitSystem cvInitSystem
  170. #define cvvNamedWindow cvNamedWindow
  171. #define cvvShowImage cvShowImage
  172. #define cvvResizeWindow cvResizeWindow
  173. #define cvvDestroyWindow cvDestroyWindow
  174. #define cvvCreateTrackbar cvCreateTrackbar
  175. #define cvvLoadImage(name) cvLoadImage((name),1)
  176. #define cvvSaveImage cvSaveImage
  177. #define cvvAddSearchPath cvAddSearchPath
  178. #define cvvWaitKey(name) cvWaitKey(0)
  179. #define cvvWaitKeyEx(name,delay) cvWaitKey(delay)
  180. #define cvvConvertImage cvConvertImage
  181. #define HG_AUTOSIZE CV_WINDOW_AUTOSIZE
  182. #define set_preprocess_func cvSetPreprocessFuncWin32
  183. #define set_postprocess_func cvSetPostprocessFuncWin32
  184. #ifdef WIN32
  185. typedef int (CV_CDECL * CvWin32WindowCallback)(HWND, UINT, WPARAM, LPARAM, int*);
  186. CVAPI(void) cvSetPreprocessFuncWin32( CvWin32WindowCallback on_preprocess );
  187. CVAPI(void) cvSetPostprocessFuncWin32( CvWin32WindowCallback on_postprocess );
  188. CV_INLINE int iplWidth( const IplImage* img );
  189. CV_INLINE int iplWidth( const IplImage* img )
  190. {
  191.     return !img ? 0 : !img->roi ? img->width : img->roi->width;
  192. }
  193. CV_INLINE int iplHeight( const IplImage* img );
  194. CV_INLINE int iplHeight( const IplImage* img )
  195. {
  196.     return !img ? 0 : !img->roi ? img->height : img->roi->height;
  197. }
  198. #endif
  199. #endif /* obsolete functions */
  200. /* For use with Win32 */
  201. #ifdef WIN32
  202. CV_INLINE RECT NormalizeRect( RECT r );
  203. CV_INLINE RECT NormalizeRect( RECT r )
  204. {
  205.     int t;
  206.     if( r.left > r.right )
  207.     {
  208.         t = r.left;
  209.         r.left = r.right;
  210.         r.right = t;
  211.     }
  212.     if( r.top > r.bottom )
  213.     {
  214.         t = r.top;
  215.         r.top = r.bottom;
  216.         r.bottom = t;
  217.     }
  218.     return r;
  219. }
  220. CV_INLINE CvRect RectToCvRect( RECT sr );
  221. CV_INLINE CvRect RectToCvRect( RECT sr )
  222. {
  223.     sr = NormalizeRect( sr );
  224.     return cvRect( sr.left, sr.top, sr.right - sr.left, sr.bottom - sr.top );
  225. }
  226. CV_INLINE RECT CvRectToRect( CvRect sr );
  227. CV_INLINE RECT CvRectToRect( CvRect sr )
  228. {
  229.     RECT dr;
  230.     dr.left = sr.x;
  231.     dr.top = sr.y;
  232.     dr.right = sr.x + sr.width;
  233.     dr.bottom = sr.y + sr.height;
  234.     return dr;
  235. }
  236. CV_INLINE IplROI RectToROI( RECT r );
  237. CV_INLINE IplROI RectToROI( RECT r )
  238. {
  239.     IplROI roi;
  240.     r = NormalizeRect( r );
  241.     roi.xOffset = r.left;
  242.     roi.yOffset = r.top;
  243.     roi.width = r.right - r.left;
  244.     roi.height = r.bottom - r.top;
  245.     roi.coi = 0;
  246.     return roi;
  247. }
  248. #endif /* WIN32 */
  249. #ifdef __cplusplus
  250. }  /* end of extern "C" */
  251. #endif /* __cplusplus */
  252. #if defined __cplusplus && (!defined WIN32 || !defined (__GNUC__))
  253. #define CImage CvvImage
  254. /* CvvImage class definition */
  255. class CV_EXPORTS CvvImage
  256. {
  257. public:
  258.     CvvImage();
  259.     virtual ~CvvImage();
  260.     /* Create image (BGR or grayscale) */
  261.     virtual bool  Create( int width, int height, int bits_per_pixel, int image_origin = 0 );
  262.     /* Load image from specified file */
  263.     virtual bool  Load( const char* filename, int desired_color = 1 );
  264.     /* Load rectangle from the file */
  265.     virtual bool  LoadRect( const char* filename,
  266.                             int desired_color, CvRect r );
  267. #ifdef WIN32
  268.     virtual bool  LoadRect( const char* filename,
  269.                             int desired_color, RECT r )
  270.     {
  271.         return LoadRect( filename, desired_color,
  272.                          cvRect( r.left, r.top, r.right - r.left, r.bottom - r.top ));
  273.     }
  274. #endif
  275.     /* Save entire image to specified file. */
  276.     virtual bool  Save( const char* filename );
  277.     /* Get copy of input image ROI */
  278.     virtual void  CopyOf( CvvImage& image, int desired_color = -1 );
  279.     virtual void  CopyOf( IplImage* img, int desired_color = -1 );
  280.     IplImage* GetImage() { return m_img; };
  281.     virtual void  Destroy(void);
  282.     /* width and height of ROI */
  283.     int Width() { return !m_img ? 0 : !m_img->roi ? m_img->width : m_img->roi->width; };
  284.     int Height() { return !m_img ? 0 : !m_img->roi ? m_img->height : m_img->roi->height;};
  285.     int Bpp() { return m_img ? (m_img->depth & 255)*m_img->nChannels : 0; };
  286.     virtual void  Fill( int color );
  287.     /* draw to highgui window */
  288.     virtual void  Show( const char* window );
  289. #ifdef WIN32
  290.     /* draw part of image to the specified DC */
  291.     virtual void  Show( HDC dc, int x, int y, int width, int height,
  292.                         int from_x = 0, int from_y = 0 );
  293.     /* draw the current image ROI to the specified rectangle of the destination DC */
  294.     virtual void  DrawToHDC( HDC hDCDst, RECT* pDstRect );
  295. #endif
  296. protected:
  297.     IplImage*  m_img;
  298. };
  299. #endif /* __cplusplus */
  300. #endif /* _HIGH_GUI_ */