📄 cxmisc.h
字号:
T* right1; \ T* pivot; \ T* a; \ T* b; \ T* c; \ int swap_cnt = 0; \ \ left0 = left; \ right0 = right; \ pivot = left + (n/2); \ \ if( n > 40 ) \ { \ int d = n / 8; \ a = left, b = left + d, c = left + 2*d; \ left = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ \ a = pivot - d, b = pivot, c = pivot + d; \ pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ \ a = right - 2*d, b = right - d, c = right; \ right = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ } \ \ a = left, b = pivot, c = right; \ pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ if( pivot != left0 ) \ { \ CV_SWAP( *pivot, *left0, t ); \ pivot = left0; \ } \ left = left1 = left0 + 1; \ right = right1 = right0; \ \ for(;;) \ { \ while( left <= right && !LT(*pivot, *left) ) \ { \ if( !LT(*left, *pivot) ) \ { \ if( left > left1 ) \ CV_SWAP( *left1, *left, t ); \ swap_cnt = 1; \ left1++; \ } \ left++; \ } \ \ while( left <= right && !LT(*right, *pivot) ) \ { \ if( !LT(*pivot, *right) ) \ { \ if( right < right1 ) \ CV_SWAP( *right1, *right, t ); \ swap_cnt = 1; \ right1--; \ } \ right--; \ } \ \ if( left > right ) \ break; \ CV_SWAP( *left, *right, t ); \ swap_cnt = 1; \ left++; \ right--; \ } \ \ if( swap_cnt == 0 ) \ { \ left = left0, right = right0; \ goto insert_sort; \ } \ \ n = MIN( (int)(left1 - left0), (int)(left - left1) ); \ for( i = 0; i < n; i++ ) \ CV_SWAP( left0[i], left[i-n], t ); \ \ n = MIN( (int)(right0 - right1), (int)(right1 - right) ); \ for( i = 0; i < n; i++ ) \ CV_SWAP( left[i], right0[i-n+1], t ); \ n = (int)(left - left1); \ m = (int)(right1 - right); \ if( n > 1 ) \ { \ if( m > 1 ) \ { \ if( n > m ) \ { \ stack[++sp].lb = left0; \ stack[sp].ub = left0 + n - 1; \ left = right0 - m + 1, right = right0; \ } \ else \ { \ stack[++sp].lb = right0 - m + 1; \ stack[sp].ub = right0; \ left = left0, right = left0 + n - 1; \ } \ } \ else \ left = left0, right = left0 + n - 1; \ } \ else if( m > 1 ) \ left = right0 - m + 1, right = right0; \ else \ break; \ } \ } \ } \}#define CV_IMPLEMENT_QSORT( func_name, T, cmp ) \ CV_IMPLEMENT_QSORT_EX( func_name, T, cmp, int )/****************************************************************************************\* Structures and macros for integration with IPP *\****************************************************************************************//* IPP-compatible return codes */typedef enum CvStatus{ CV_BADMEMBLOCK_ERR = -113, CV_INPLACE_NOT_SUPPORTED_ERR= -112, CV_UNMATCHED_ROI_ERR = -111, CV_NOTFOUND_ERR = -110, CV_BADCONVERGENCE_ERR = -109, CV_BADDEPTH_ERR = -107, CV_BADROI_ERR = -106, CV_BADHEADER_ERR = -105, CV_UNMATCHED_FORMATS_ERR = -104, CV_UNSUPPORTED_COI_ERR = -103, CV_UNSUPPORTED_CHANNELS_ERR = -102, CV_UNSUPPORTED_DEPTH_ERR = -101, CV_UNSUPPORTED_FORMAT_ERR = -100, CV_BADARG_ERR = -49, //ipp comp CV_NOTDEFINED_ERR = -48, //ipp comp CV_BADCHANNELS_ERR = -47, //ipp comp CV_BADRANGE_ERR = -44, //ipp comp CV_BADSTEP_ERR = -29, //ipp comp CV_BADFLAG_ERR = -12, CV_DIV_BY_ZERO_ERR = -11, //ipp comp CV_BADCOEF_ERR = -10, CV_BADFACTOR_ERR = -7, CV_BADPOINT_ERR = -6, CV_BADSCALE_ERR = -4, CV_OUTOFMEM_ERR = -3, CV_NULLPTR_ERR = -2, CV_BADSIZE_ERR = -1, CV_NO_ERR = 0, CV_OK = CV_NO_ERR}CvStatus;#define CV_ERROR_FROM_STATUS( result ) \ CV_ERROR( cvErrorFromIppStatus( result ), "OpenCV function failed" )#define IPPI_CALL( Func ) \{ \ CvStatus ippi_call_result; \ ippi_call_result = Func; \ \ if( ippi_call_result < 0 ) \ CV_ERROR_FROM_STATUS( (ippi_call_result)); \}#define CV_PLUGIN_NONE 0#define CV_PLUGIN_OPTCV 1 /* custom "emerged" ippopencv library */#define CV_PLUGIN_IPPCV 2 /* IPP: computer vision */#define CV_PLUGIN_IPPI 3 /* IPP: image processing */#define CV_PLUGIN_IPPS 4 /* IPP: signal processing */#define CV_PLUGIN_IPPVM 5 /* IPP: vector math functions */#define CV_PLUGIN_IPPCC 6 /* IPP: color space conversion */#define CV_PLUGIN_MKL 8 /* Intel Math Kernel Library */#define CV_PLUGIN_MAX 16#define CV_PLUGINS1(lib1) ((lib1)&15)#define CV_PLUGINS2(lib1,lib2) (((lib1)&15)|(((lib2)&15)<<4))#define CV_PLUGINS3(lib1,lib2,lib3) (((lib1)&15)|(((lib2)&15)<<4)|(((lib2)&15)<<8))#define CV_NOTHROW throw()#ifndef IPCVAPI#define IPCVAPI(type,declspec,name,args) \ /* function pointer */ \ typedef type (declspec* name##_t) args; \ extern name##_t name##_p; \ type declspec name args;#endif#define IPCVAPI_EX(type,name,ipp_name,ipp_search_modules,args) \ IPCVAPI(type,CV_STDCALL,name,args) #define IPCVAPI_C_EX(type,name,ipp_name,ipp_search_modules,args)\ IPCVAPI(type,CV_CDECL,name,args) #ifndef IPCVAPI_IMPL#define IPCVAPI_IMPL(type,name,args,arg_names) \ static type CV_STDCALL name##_f args; \ name##_t name##_p = name##_f; \ type CV_STDCALL name args { return name##_p arg_names; } \ static type CV_STDCALL name##_f args#endif/* IPP types' enumeration */typedef enum CvDataType { cv1u, cv8u, cv8s, cv16u, cv16s, cv16sc, cv32u, cv32s, cv32sc, cv32f, cv32fc, cv64u, cv64s, cv64sc, cv64f, cv64fc} CvDataType;typedef enum CvHintAlgorithm {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -