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*/ 148CVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); 149CVAPI(CvMat*) cvLoadImageM( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); 150 151/* save image to file */ 152CVAPI(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 */ 157CVAPI(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 */ 160CVAPI(int) cvWaitKey(int delay CV_DEFAULT(0)); 161 162 163/****************************************************************************************\ 164* Working with Video Files and Cameras * 165\****************************************************************************************/ 166 167/* "black box" capture structure */ 168typedef struct CvCapture CvCapture; 169 170/* start capturing frames from video file */ 171CVAPI(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 */ 175CVAPI(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!!! */ 181CVAPI(IplImage*) cvRetrieveFrame( CvCapture* capture ); 182 183/* Just a combination of cvGrabFrame and cvRetrieveFrame 184 !!!DO NOT RELEASE or MODIFY the retrieved frame!!! */ 185CVAPI(IplImage*) cvQueryFrame( CvCapture* capture ); 186 187/* stop capturing/reading and free resources */ 188CVAPI(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 */ 209CVAPI(double) cvGetCaptureProperty( CvCapture* capture, int property_id ); 210CVAPI(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 245typedef int (CV_CDECL * CvWin32WindowCallback)(HWND, UINT, WPARAM, LPARAM, int*); 246CVAPI(void) cvSetPreprocessFuncWin32( CvWin32WindowCallback on_preprocess ); 247CVAPI(void) cvSetPostprocessFuncWin32( CvWin32WindowCallback on_postprocess ); 248 249CV_INLINE int iplWidth( const IplImage* img ); 250CV_INLINE int iplWidth( const IplImage* img ) 251{ 252 return !img ? 0 : !img->roi ? img->width : img->roi->width; 253} 254 255CV_INLINE int iplHeight( const IplImage* img ); 256CV_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 268CV_INLINE RECT NormalizeRect( RECT r ); 269CV_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 290CV_INLINE CvRect RectToCvRect( RECT sr ); 291CV_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 297CV_INLINE RECT CvRectToRect( CvRect sr ); 298CV_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 309CV_INLINE IplROI RectToROI( RECT r ); 310CV_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 */ 335class CV_EXPORTS CvvImage 336{ 337public: 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 378protected: 379 380 IplImage* m_img; 381}; 382 383#endif /* __cplusplus */ 384 385#endif /* _HIGH_GUI_ */ 386