highgui.h
上传用户:soukeisyuu
上传日期:2022-07-03
资源大小:5943k
文件大小:18k
源码类别:

波变换

开发平台:

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. #ifndef SKIP_INCLUDES
  44.   #include "cxcore.h"
  45.   #if defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64
  46.     #include <windows.h>
  47.   #endif
  48. #else // SKIP_INCLUDES
  49.   #if defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64
  50.     #define CV_CDECL __cdecl
  51.     #define CV_STDCALL __stdcall
  52.   #else
  53.     #define CV_CDECL
  54.     #define CV_STDCALL
  55.   #endif
  56.   #ifndef CV_EXTERN_C
  57.     #ifdef __cplusplus
  58.       #define CV_EXTERN_C extern "C"
  59.       #define CV_DEFAULT(val) = val
  60.     #else
  61.       #define CV_EXTERN_C
  62.       #define CV_DEFAULT(val)
  63.     #endif
  64.   #endif
  65.   #ifndef CV_EXTERN_C_FUNCPTR
  66.     #ifdef __cplusplus
  67.       #define CV_EXTERN_C_FUNCPTR(x) extern "C" { typedef x; }
  68.     #else
  69.       #define CV_EXTERN_C_FUNCPTR(x) typedef x
  70.     #endif
  71.   #endif
  72.   #ifndef CV_INLINE
  73.     #if defined __cplusplus
  74.       #define CV_INLINE inline
  75.     #elif (defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64) && !defined __GNUC__
  76.       #define CV_INLINE __inline
  77.     #else
  78.       #define CV_INLINE static
  79.     #endif
  80.   #endif /* CV_INLINE */
  81.   #if (defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64) && defined CVAPI_EXPORTS
  82.     #define CV_EXPORTS __declspec(dllexport)
  83.   #else
  84.     #define CV_EXPORTS
  85.   #endif
  86.   #ifndef CVAPI
  87.     #define CVAPI(rettype) CV_EXTERN_C CV_EXPORTS rettype CV_CDECL
  88.   #endif
  89. #endif // SKIP_INCLUDES
  90. #if defined(_CH_)
  91.   #pragma package <chopencv>
  92.   #include <chdl.h>
  93.   LOAD_CHDL(highgui)
  94. #endif
  95. #ifdef __cplusplus
  96.   extern "C" {
  97. #endif /* __cplusplus */
  98. /****************************************************************************************
  99. *                                  Basic GUI functions                                   *
  100. ****************************************************************************************/
  101. /* this function is used to set some external parameters in case of X Window */
  102. CVAPI(int) cvInitSystem( int argc, char** argv );
  103. CVAPI(int) cvStartWindowThread();
  104. #define CV_WINDOW_AUTOSIZE  1
  105. /* create window */
  106. CVAPI(int) cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );
  107. /* display image within window (highgui windows remember their content) */
  108. CVAPI(void) cvShowImage( const char* name, const CvArr* image );
  109. /* resize/move window */
  110. CVAPI(void) cvResizeWindow( const char* name, int width, int height );
  111. CVAPI(void) cvMoveWindow( const char* name, int x, int y );
  112. /* destroy window and all the trackers associated with it */
  113. CVAPI(void) cvDestroyWindow( const char* name );
  114. CVAPI(void) cvDestroyAllWindows(void);
  115. /* get native window handle (HWND in case of Win32 and Widget in case of X Window) */
  116. CVAPI(void*) cvGetWindowHandle( const char* name );
  117. /* get name of highgui window given its native handle */
  118. CVAPI(const char*) cvGetWindowName( void* window_handle );
  119. typedef void (CV_CDECL *CvTrackbarCallback)(int pos);
  120. /* create trackbar and display it on top of given window, set callback */
  121. CVAPI(int) cvCreateTrackbar( const char* trackbar_name, const char* window_name,
  122.                              int* value, int count, CvTrackbarCallback on_change);
  123. typedef void (CV_CDECL *CvTrackbarCallback2)(int pos, void* userdata);
  124. CVAPI(int) cvCreateTrackbar2( const char* trackbar_name, const char* window_name,
  125.                               int* value, int count, CvTrackbarCallback2 on_change,
  126.                               void* userdata CV_DEFAULT(0));
  127. /* retrieve or set trackbar position */
  128. CVAPI(int) cvGetTrackbarPos( const char* trackbar_name, const char* window_name );
  129. CVAPI(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos );
  130. #define CV_EVENT_MOUSEMOVE      0
  131. #define CV_EVENT_LBUTTONDOWN    1
  132. #define CV_EVENT_RBUTTONDOWN    2
  133. #define CV_EVENT_MBUTTONDOWN    3
  134. #define CV_EVENT_LBUTTONUP      4
  135. #define CV_EVENT_RBUTTONUP      5
  136. #define CV_EVENT_MBUTTONUP      6
  137. #define CV_EVENT_LBUTTONDBLCLK  7
  138. #define CV_EVENT_RBUTTONDBLCLK  8
  139. #define CV_EVENT_MBUTTONDBLCLK  9
  140. #define CV_EVENT_FLAG_LBUTTON   1
  141. #define CV_EVENT_FLAG_RBUTTON   2
  142. #define CV_EVENT_FLAG_MBUTTON   4
  143. #define CV_EVENT_FLAG_CTRLKEY   8
  144. #define CV_EVENT_FLAG_SHIFTKEY  16
  145. #define CV_EVENT_FLAG_ALTKEY    32
  146. typedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags, void* param);
  147. /* assign callback for mouse events */
  148. CVAPI(void) cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse,
  149.                                 void* param CV_DEFAULT(NULL));
  150. /* 8bit, color or not */
  151. #define CV_LOAD_IMAGE_UNCHANGED  -1
  152. /* 8bit, gray */
  153. #define CV_LOAD_IMAGE_GRAYSCALE   0
  154. /* ?, color */
  155. #define CV_LOAD_IMAGE_COLOR       1
  156. /* any depth, ? */
  157. #define CV_LOAD_IMAGE_ANYDEPTH    2
  158. /* ?, any color */
  159. #define CV_LOAD_IMAGE_ANYCOLOR    4
  160. /* load image from file
  161.   iscolor can be a combination of above flags where CV_LOAD_IMAGE_UNCHANGED
  162.   overrides the other flags
  163.   using CV_LOAD_IMAGE_ANYCOLOR alone is equivalent to CV_LOAD_IMAGE_UNCHANGED
  164.   unless CV_LOAD_IMAGE_ANYDEPTH is specified images are converted to 8bit
  165. */
  166. CVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));
  167. CVAPI(CvMat*) cvLoadImageM( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));
  168. #define CV_IMWRITE_JPEG_QUALITY 1
  169. #define CV_IMWRITE_PNG_COMPRESSION 16
  170. #define CV_IMWRITE_PXM_BINARY 32
  171. /* save image to file */
  172. CVAPI(int) cvSaveImage( const char* filename, const CvArr* image,
  173.                         const int* params CV_DEFAULT(0) );
  174. /* decode image stored in the buffer */
  175. CVAPI(IplImage*) cvDecodeImage( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));
  176. CVAPI(CvMat*) cvDecodeImageM( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));
  177. /* encode image and store the result as a byte vector (single-row 8uC1 matrix) */
  178. CVAPI(CvMat*) cvEncodeImage( const char* ext, const CvArr* image,
  179.                              const int* params CV_DEFAULT(0) );
  180. #define CV_CVTIMG_FLIP      1
  181. #define CV_CVTIMG_SWAP_RB   2
  182. /* utility function: convert one image to another with optional vertical flip */
  183. CVAPI(void) cvConvertImage( const CvArr* src, CvArr* dst, int flags CV_DEFAULT(0));
  184. /* wait for key event infinitely (delay<=0) or for "delay" milliseconds */
  185. CVAPI(int) cvWaitKey(int delay CV_DEFAULT(0));
  186. /****************************************************************************************
  187. *                         Working with Video Files and Cameras                           *
  188. ****************************************************************************************/
  189. /* "black box" capture structure */
  190. typedef struct CvCapture CvCapture;
  191. /* start capturing frames from video file */
  192. CVAPI(CvCapture*) cvCreateFileCapture( const char* filename );
  193. #define CV_CAP_ANY      0     // autodetect
  194. #define CV_CAP_MIL      100   // MIL proprietary drivers
  195. #define CV_CAP_VFW      200   // platform native
  196. #define CV_CAP_V4L      200
  197. #define CV_CAP_V4L2     200
  198. #define CV_CAP_FIREWARE 300   // IEEE 1394 drivers
  199. #define CV_CAP_FIREWIRE 300
  200. #define CV_CAP_IEEE1394 300
  201. #define CV_CAP_DC1394   300
  202. #define CV_CAP_CMU1394  300
  203. #define CV_CAP_STEREO   400   // TYZX proprietary drivers
  204. #define CV_CAP_TYZX     400
  205. #define CV_TYZX_LEFT    400
  206. #define CV_TYZX_RIGHT   401
  207. #define CV_TYZX_COLOR   402
  208. #define CV_TYZX_Z       403
  209. #define CV_CAP_QT       500   // QuickTime
  210. #define CV_CAP_UNICAP   600   // Unicap drivers
  211. #define CV_CAP_DSHOW    700   // DirectShow (via videoInput)
  212. /* start capturing frames from camera: index = camera_index + domain_offset (CV_CAP_*) */
  213. CVAPI(CvCapture*) cvCreateCameraCapture( int index );
  214. /* grab a frame, return 1 on success, 0 on fail.
  215.   this function is thought to be fast               */
  216. CVAPI(int) cvGrabFrame( CvCapture* capture );
  217. /* get the frame grabbed with cvGrabFrame(..)
  218.   This function may apply some frame processing like
  219.   frame decompression, flipping etc.
  220.   !!!DO NOT RELEASE or MODIFY the retrieved frame!!! */
  221. CVAPI(IplImage*) cvRetrieveFrame( CvCapture* capture, int streamIdx CV_DEFAULT(0) );
  222. /* Just a combination of cvGrabFrame and cvRetrieveFrame
  223.    !!!DO NOT RELEASE or MODIFY the retrieved frame!!!      */
  224. CVAPI(IplImage*) cvQueryFrame( CvCapture* capture );
  225. /* stop capturing/reading and free resources */
  226. CVAPI(void) cvReleaseCapture( CvCapture** capture );
  227. #define CV_CAP_PROP_POS_MSEC       0
  228. #define CV_CAP_PROP_POS_FRAMES     1
  229. #define CV_CAP_PROP_POS_AVI_RATIO  2
  230. #define CV_CAP_PROP_FRAME_WIDTH    3
  231. #define CV_CAP_PROP_FRAME_HEIGHT   4
  232. #define CV_CAP_PROP_FPS            5
  233. #define CV_CAP_PROP_FOURCC         6
  234. #define CV_CAP_PROP_FRAME_COUNT    7
  235. #define CV_CAP_PROP_FORMAT         8
  236. #define CV_CAP_PROP_MODE           9
  237. #define CV_CAP_PROP_BRIGHTNESS    10
  238. #define CV_CAP_PROP_CONTRAST      11
  239. #define CV_CAP_PROP_SATURATION    12
  240. #define CV_CAP_PROP_HUE           13
  241. #define CV_CAP_PROP_GAIN          14
  242. #define CV_CAP_PROP_EXPOSURE      15
  243. #define CV_CAP_PROP_CONVERT_RGB   16
  244. #define CV_CAP_PROP_WHITE_BALANCE 17
  245. #define CV_CAP_PROP_RECTIFICATION 18
  246. /* retrieve or set capture properties */
  247. CVAPI(double) cvGetCaptureProperty( CvCapture* capture, int property_id );
  248. CVAPI(int)    cvSetCaptureProperty( CvCapture* capture, int property_id, double value );
  249. // Return the type of the capturer (eg, CV_CAP_V4W, CV_CAP_UNICAP), which is unknown if created with CV_CAP_ANY
  250. CVAPI(int)    cvGetCaptureDomain( CvCapture* capture);  
  251. /* "black box" video file writer structure */
  252. typedef struct CvVideoWriter CvVideoWriter;
  253. #ifndef SWIG
  254. #define CV_FOURCC(c1,c2,c3,c4)  
  255.     (((c1)&255) + (((c2)&255)<<8) + (((c3)&255)<<16) + (((c4)&255)<<24))
  256. #else
  257.   // Prototype for CV_FOURCC so that swig can generate wrapper without mixing up the define
  258.   int CV_FOURCC(char c1, char c2, char c3, char c4);
  259. #endif
  260. #define CV_FOURCC_PROMPT -1  /* Open Codec Selection Dialog (Windows only) */
  261. #define CV_FOURCC_DEFAULT CV_FOURCC('I', 'Y', 'U', 'V') /* Use default codec for specified filename (Linux only) */
  262. /* initialize video file writer */
  263. CVAPI(CvVideoWriter*) cvCreateVideoWriter( const char* filename, int fourcc,
  264.                                            double fps, CvSize frame_size,
  265.                                            int is_color CV_DEFAULT(1));
  266. //CVAPI(CvVideoWriter*) cvCreateImageSequenceWriter( const char* filename,
  267. //                                                   int is_color CV_DEFAULT(1));
  268. /* write frame to video file */
  269. CVAPI(int) cvWriteFrame( CvVideoWriter* writer, const IplImage* image );
  270. /* close video file writer */
  271. CVAPI(void) cvReleaseVideoWriter( CvVideoWriter** writer );
  272. /****************************************************************************************
  273. *                              Obsolete functions/synonyms                               *
  274. ****************************************************************************************/
  275. #ifndef HIGHGUI_NO_BACKWARD_COMPATIBILITY
  276.     #define HIGHGUI_BACKWARD_COMPATIBILITY
  277. #endif
  278. #ifdef HIGHGUI_BACKWARD_COMPATIBILITY
  279. #define cvCaptureFromFile cvCreateFileCapture
  280. #define cvCaptureFromCAM cvCreateCameraCapture
  281. #define cvCaptureFromAVI cvCaptureFromFile
  282. #define cvCreateAVIWriter cvCreateVideoWriter
  283. #define cvWriteToAVI cvWriteFrame
  284. #define cvAddSearchPath(path)
  285. #define cvvInitSystem cvInitSystem
  286. #define cvvNamedWindow cvNamedWindow
  287. #define cvvShowImage cvShowImage
  288. #define cvvResizeWindow cvResizeWindow
  289. #define cvvDestroyWindow cvDestroyWindow
  290. #define cvvCreateTrackbar cvCreateTrackbar
  291. #define cvvLoadImage(name) cvLoadImage((name),1)
  292. #define cvvSaveImage cvSaveImage
  293. #define cvvAddSearchPath cvAddSearchPath
  294. #define cvvWaitKey(name) cvWaitKey(0)
  295. #define cvvWaitKeyEx(name,delay) cvWaitKey(delay)
  296. #define cvvConvertImage cvConvertImage
  297. #define HG_AUTOSIZE CV_WINDOW_AUTOSIZE
  298. #define set_preprocess_func cvSetPreprocessFuncWin32
  299. #define set_postprocess_func cvSetPostprocessFuncWin32
  300. #if defined WIN32 || defined _WIN32
  301. typedef int (CV_CDECL * CvWin32WindowCallback)(HWND, UINT, WPARAM, LPARAM, int*);
  302. CVAPI(void) cvSetPreprocessFuncWin32( CvWin32WindowCallback on_preprocess );
  303. CVAPI(void) cvSetPostprocessFuncWin32( CvWin32WindowCallback on_postprocess );
  304. CV_INLINE int iplWidth( const IplImage* img );
  305. CV_INLINE int iplWidth( const IplImage* img )
  306. {
  307.     return !img ? 0 : !img->roi ? img->width : img->roi->width;
  308. }
  309. CV_INLINE int iplHeight( const IplImage* img );
  310. CV_INLINE int iplHeight( const IplImage* img )
  311. {
  312.     return !img ? 0 : !img->roi ? img->height : img->roi->height;
  313. }
  314. #endif
  315. #endif /* obsolete functions */
  316. /* For use with Win32 */
  317. #if defined WIN32 || defined _WIN32
  318. CV_INLINE RECT NormalizeRect( RECT r );
  319. CV_INLINE RECT NormalizeRect( RECT r )
  320. {
  321.     int t;
  322.     if( r.left > r.right )
  323.     {
  324.         t = r.left;
  325.         r.left = r.right;
  326.         r.right = t;
  327.     }
  328.     if( r.top > r.bottom )
  329.     {
  330.         t = r.top;
  331.         r.top = r.bottom;
  332.         r.bottom = t;
  333.     }
  334.     return r;
  335. }
  336. CV_INLINE CvRect RectToCvRect( RECT sr );
  337. CV_INLINE CvRect RectToCvRect( RECT sr )
  338. {
  339.     sr = NormalizeRect( sr );
  340.     return cvRect( sr.left, sr.top, sr.right - sr.left, sr.bottom - sr.top );
  341. }
  342. CV_INLINE RECT CvRectToRect( CvRect sr );
  343. CV_INLINE RECT CvRectToRect( CvRect sr )
  344. {
  345.     RECT dr;
  346.     dr.left = sr.x;
  347.     dr.top = sr.y;
  348.     dr.right = sr.x + sr.width;
  349.     dr.bottom = sr.y + sr.height;
  350.     return dr;
  351. }
  352. CV_INLINE IplROI RectToROI( RECT r );
  353. CV_INLINE IplROI RectToROI( RECT r )
  354. {
  355.     IplROI roi;
  356.     r = NormalizeRect( r );
  357.     roi.xOffset = r.left;
  358.     roi.yOffset = r.top;
  359.     roi.width = r.right - r.left;
  360.     roi.height = r.bottom - r.top;
  361.     roi.coi = 0;
  362.     return roi;
  363. }
  364. #endif /* WIN32 */
  365. #ifdef __cplusplus
  366. }  /* end of extern "C" */
  367. #endif /* __cplusplus */
  368. #if defined __cplusplus && !defined CV_NO_CVV_IMAGE
  369. /* CvvImage class definition */
  370. class CV_EXPORTS CvvImage
  371. {
  372. public:
  373.     CvvImage();
  374.     virtual ~CvvImage();
  375.     /* Create image (BGR or grayscale) */
  376.     virtual bool  Create( int width, int height, int bits_per_pixel, int image_origin = 0 );
  377.     /* Load image from specified file */
  378.     virtual bool  Load( const char* filename, int desired_color = 1 );
  379.     /* Load rectangle from the file */
  380.     virtual bool  LoadRect( const char* filename,
  381.                             int desired_color, CvRect r );
  382. #if defined WIN32 || defined _WIN32
  383.     virtual bool  LoadRect( const char* filename,
  384.                             int desired_color, RECT r )
  385.     {
  386.         return LoadRect( filename, desired_color,
  387.                          cvRect( r.left, r.top, r.right - r.left, r.bottom - r.top ));
  388.     }
  389. #endif
  390.     /* Save entire image to specified file. */
  391.     virtual bool  Save( const char* filename );
  392.     /* Get copy of input image ROI */
  393.     virtual void  CopyOf( CvvImage& image, int desired_color = -1 );
  394.     virtual void  CopyOf( IplImage* img, int desired_color = -1 );
  395.     IplImage* GetImage() { return m_img; };
  396.     virtual void  Destroy(void);
  397.     /* width and height of ROI */
  398.     int Width() { return !m_img ? 0 : !m_img->roi ? m_img->width : m_img->roi->width; };
  399.     int Height() { return !m_img ? 0 : !m_img->roi ? m_img->height : m_img->roi->height;};
  400.     int Bpp() { return m_img ? (m_img->depth & 255)*m_img->nChannels : 0; };
  401.     virtual void  Fill( int color );
  402.     /* draw to highgui window */
  403.     virtual void  Show( const char* window );
  404. #if defined WIN32 || defined _WIN32
  405.     /* draw part of image to the specified DC */
  406.     virtual void  Show( HDC dc, int x, int y, int width, int height,
  407.                         int from_x = 0, int from_y = 0 );
  408.     /* draw the current image ROI to the specified rectangle of the destination DC */
  409.     virtual void  DrawToHDC( HDC hDCDst, RECT* pDstRect );
  410. #endif
  411. protected:
  412.     IplImage*  m_img;
  413. };
  414. typedef CvvImage CImage;
  415. #endif /* __cplusplus */
  416. /****************************************************************************************
  417. *                                    New interface                                       *
  418. ****************************************************************************************/
  419. #include "highgui.hpp"
  420. #endif /* _HIGH_GUI_ */