由于openCV2.2.0源文件很龐大,這里我只分析openCV2.2.0文件組織結構的各個模塊的include文件(重點分析各個模塊下引用的算法和實現的功能),而不是src文件。這里分析各個模塊有助于更好的從整體把握和理解openCV2.2.0。這里只是自己做草稿部分,便于以后修改查找。有理解不對的,希望大家指出。--瘋子_007
?
首先分析的是highgui目錄下的highgui_c.h和highgui.cpp文件:
highgui_c.h分三部分:基本的GUI函數庫,視頻接口,和過時的函數庫。基本的GUI函數庫包括:創建窗體,設置窗體屬性,獲取窗體屬性,在窗體內顯示圖片,改變窗體大小,移動窗體,銷毀窗體(包括銷毀所有窗體);獲取給定句柄的窗體名,創建和顯示滾動條,恢復和設置滾動條位置;鼠標回調事件,設置鼠標事件回調,枚舉鼠標類型;載入圖片,保存圖片,改變圖片結構;按鍵等待。視頻接口包括:定義攝像頭結構,通過視頻文件獲取幀,從攝像頭獲取視頻文件,幀處理的特殊函數(cvRetrieveFrame),抓取幀,釋放視頻文件;恢復或者設置攝像頭屬性,返回攝像頭類型;定義寫視頻指針結構體,四色編碼,打開編碼屬性對話框,初始化寫視頻指針,將幀流寫入寫視頻指針,釋放寫視頻指針。過時的函數庫。將一些功能相同的函數,重新命名,保持舊代碼的連接性。
highgui.cpp在CV命名空間枚舉相應的一些函數和定義了VideoCapture,VideoWriter類,采用面向對象的思想進行編程,更容易理解和整體把握。
?
詳細分析如下: . /highgui/include/opencv2/highgui/highgui_c.h
基本GUI函數:
支持QT模塊一些函數(省略)
創建窗體:CVAPI(int) cvNamedWindow( const char* name, int flagsCV_DEFAULT(CV_WINDOW_AUTOSIZE) );
設置窗體屬性:CVAPI(void) cvSetWindowProperty(const char* name, intprop_id, double prop_value);
獲取窗體屬性:cvGetWindowProperty(const char* name, int prop_id);
在窗體內顯示圖片:CVAPI(void) cvShowImage( const char* name, const CvArr*image );
改變窗體大小:CVAPI(void) cvResizeWindow( const char* name, int width,int height );
移動窗體大小:CVAPI(void) cvMoveWindow( const char* name, int x, int y);
銷毀窗體(包括連接窗體的滾動條):CVAPI(void) cvDestroyWindow( const char* name);
銷毀所有窗體:CVAPI(void) cvDestroyAllWindows(void);
獲取該窗體句柄(命令行形式獲取HWWD,圖形窗口形式獲取widget):CVAPI(void*)cvGetWindowHandle( const char* name );
獲取給定句柄的窗體名:CVAPI(const char*) cvGetWindowName( void*window_handle );
?
位置回調定義1: typedef void (CV_CDECL *CvTrackbarCallback)(intpos);
在給定的窗體創建和顯示滾動條1: CVAPI(int) cvCreateTrackbar( const char*trackbar_name, const char* window_name, int* value, int count,CvTrackbarCallback on_change CV_DEFAULT(NULL));
位置回調定義2: typedef void (CV_CDECL *CvTrackbarCallback2)(int pos,void* userdata);
在給定的窗體創建和顯示滾動條2: CVAPI(int) cvCreateTrackbar2( const char*trackbar_name, const char* window_name,int* value, int count,CvTrackbarCallback2 on_change, void* userdata CV_DEFAULT(0));
恢復或者設置滾動條位置:CVAPI(int) cvGetTrackbarPos( const char*trackbar_name, const char* window_name ); CVAPI(void)cvSetTrackbarPos( const char* trackbar_name, const char*window_name, int pos );
枚舉鼠標事件
enum
{
?
?
?
?
?
?
?
?
?
?
};
enum
{
CV_EVENT_FLAG_LBUTTON =1,
CV_EVENT_FLAG_RBUTTON =2,
CV_EVENT_FLAG_MBUTTON =4,
CV_EVENT_FLAG_CTRLKEY =8,
CV_EVENT_FLAG_SHIFTKEY =16,
CV_EVENT_FLAG_ALTKEY =32
};
鼠標回調事件定義 typedef void (CV_CDECL *CvMouseCallback )(int event,int x, int y, int flags, void* param);
設置鼠標事件回調:CVAPI(void) cvSetMouseCallback( const char*window_name, CvMouseCallback on_mouse, void* paramCV_DEFAULT(NULL));
?
?
{
CV_LOAD_IMAGE_UNCHANGED =-1,
CV_LOAD_IMAGE_GRAYSCALE =0,
CV_LOAD_IMAGE_COLOR =1,
CV_LOAD_IMAGE_ANYDEPTH =2,
CV_LOAD_IMAGE_ANYCOLOR =4
};
?
從文件中調入圖片(iscolor 默認參數是CV_LOAD_IMAGE_UNCHANGED):
CVAPI(IplImage*) cvLoadImage( const char* filename, int iscolorCV_DEFAULT(CV_LOAD_IMAGE_COLOR)); CVAPI(CvMat*) cvLoadImageM( constchar* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); enum{ CV_IMWRITE_JPEG_QUALITY =1, CV_IMWRITE_PNG_COMPRESSION =16,CV_IMWRITE_PXM_BINARY =32 };
保存圖片: CVAPI(int) cvSaveImage( const char* filename, const CvArr*image,const int* params CV_DEFAULT(0) );
對存儲在緩沖中的圖進行解碼:
CVAPI(IplImage*) cvDecodeImage( const CvMat* buf, int iscolorCV_DEFAULT(CV_LOAD_IMAGE_COLOR)); CVAPI(CvMat*) cvDecodeImageM(const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));
對圖像進行編碼,并將結果保存到單通道的8UC1矩陣中:CVAPI(CvMat*) cvEncodeImage( constchar* ext, const CvArr* image, const int* params CV_DEFAULT(0) );enum { CV_CVTIMG_FLIP =1, CV_CVTIMG_SWAP_RB =2 };
改變圖像結構:CVAPI(void) cvConvertImage( const CvArr* src, CvArr* dst,int flags CV_DEFAULT(0));
?
按鍵等待:CVAPI(int) cvWaitKey(int delay CV_DEFAULT(0));
?
視頻文件和攝像頭接口
定義攝像頭結構體:typedef struct CvCapture CvCapture;
通過視頻文件獲取幀:
CVAPI(CvCapture*) cvCreateFileCapture( const char* filename);
enum
?
CV_CAP_ANY =0, // autodetect
CV_CAP_MIL =100, // MIL proprietarydrivers
CV_CAP_VFW =200, // platformnative
CV_CAP_V4L =200,
CV_CAP_V4L2 =200,
CV_CAP_FIREWARE =300, // IEEE 1394drivers
CV_CAP_FIREWIRE =300,
CV_CAP_IEEE1394 =300,
CV_CAP_DC1394 =300,
CV_CAP_CMU1394 =300,
CV_CAP_STEREO =400, // TYZXproprietary drivers
CV_CAP_TYZX =400,
CV_TYZX_LEFT =400,
CV_TYZX_RIGHT =401,
CV_TYZX_COLOR =402,
CV_TYZX_Z =403,
CV_CAP_QT =500, // QuickTime
CV_CAP_UNICAP =600, // Unicapdrivers
CV_CAP_DSHOW =700, // DirectShow (viavideoInput)
CV_CAP_PVAPI =800 // PvAPI, ProsilicaGigE SDK
?
?
從攝像頭獲取視頻文件:(index為camera_index + domain_offset(CV_CAP_*))CVAPI(CvCapture*) cvCreateCameraCapture( int index );
抓取幀,成功返回1,否則為0:CVAPI(int) cvGrabFrame( CvCapture* capture );
得到cvGrabFrame獲取的幀,此函數應用在一些幀處理,比如幀減壓,旋轉:(千萬不要釋放或者修改返回幀)CVAPI(IplImage*)cvRetrieveFrame( CvCapture* capture, int streamIdx CV_DEFAULT(0));
連接cvGrabFrame和cvRetrieveFrame函數:(千萬不要釋放或者修改返回幀) CVAPI(IplImage*)cvQueryFrame( CvCapture* capture );
釋放獲取或者讀取的視頻文件,釋放資源:CVAPI(void) cvReleaseCapture( CvCapture**capture );
?
enum
{
CV_CAP_PROP_POS_MSEC =0,
CV_CAP_PROP_POS_FRAMES =1,
CV_CAP_PROP_POS_AVI_RATIO =2,
CV_CAP_PROP_FRAME_WIDTH =3,
CV_CAP_PROP_FRAME_HEIGHT =4,
CV_CAP_PROP_FPS =5,
CV_CAP_PROP_FOURCC =6,
CV_CAP_PROP_FRAME_COUNT =7,
CV_CAP_PROP_FORMAT =8,
CV_CAP_PROP_MODE =9,
CV_CAP_PROP_BRIGHTNESS =10,
CV_CAP_PROP_CONTRAST =11,
CV_CAP_PROP_SATURATION =12,
CV_CAP_PROP_HUE =13,
CV_CAP_PROP_GAIN =14,
CV_CAP_PROP_EXPOSURE =15,
CV_CAP_PROP_CONVERT_RGB =16,
CV_CAP_PROP_WHITE_BALANCE =17,
CV_CAP_PROP_RECTIFICATION =18,
?
?
恢復或者設置攝像頭屬性:CVAPI(double) cvGetCaptureProperty( CvCapture*capture, int property_id ); CVAPI(int) cvSetCaptureProperty(CvCapture* capture, int property_id, double value );
返回攝像頭類型:CVAPI(int) cvGetCaptureDomain( CvCapture* capture);
定義寫視頻指針結構體:typedef struct CvVideoWriter CvVideoWriter;
對四色進行編碼:CV_INLINE int CV_FOURCC(char c1, char c2, char c3, charc4) { return (c1 & 255) + ((c2 &255) << 8) + ((c3&255) << 16) + ((c4& 255) << 24); }
打開編碼選項對話框(windows下) #define CV_FOURCC_PROMPT -1
默認編碼方式(linux下) #define CV_FOURCC_DEFAULT CV_FOURCC('I', 'Y','U', 'V')
初始化寫視頻指針:CVAPI(CvVideoWriter*) cvCreateVideoWriter( const char*filename, int fourcc,double fps, CvSize frame_size, int is_colorCV_DEFAULT(1));
將幀寫到視頻指針中:CVAPI(int) cvWriteFrame( CvVideoWriter* writer, constIplImage* image );
釋放寫視頻指針:CVAPI(void) cvReleaseVideoWriter( CvVideoWriter** writer);
?
過時的函數或同意不同名的函數
?
#define cvCaptureFromCAM cvCreateCameraCapture//從攝像頭讀取視頻
#define cvCaptureFromAVI cvCaptureFromFile//
#define cvCreateAVIWriter cvCreateVideoWriter//創建寫視頻指針
#define cvWriteToAVI cvWriteFrame//寫入寫視頻指針
#define cvAddSearchPath(path)//增加路徑
#define cvvInitSystem cvInitSystem//
#define cvvNamedWindow cvNamedWindow//創建窗體
#define cvvShowImage cvShowImage//在窗體內顯示圖片
#define cvvResizeWindow cvResizeWindow//設置窗體大小
#define cvvDestroyWindow cvDestroyWindow//銷毀窗體
#define cvvCreateTrackbar cvCreateTrackbar//創建滾動條
#define cvvLoadImage(name) cvLoadImage((name),1)//載入圖片
#define cvvSaveImage cvSaveImage//保存圖片
#define cvvAddSearchPath cvAddSearchPath//增加路徑
#define cvvWaitKey(name) cvWaitKey(0)//按鍵等待
#define cvvWaitKeyEx(name,delay) cvWaitKey(delay)//按鍵等待
#define cvvConvertImage cvConvertImage//圖片結構改變
#define HG_AUTOSIZE CV_WINDOW_AUTOSIZE//
#define set_preprocess_func cvSetPreprocessFuncWin32
#define set_postprocess_func cvSetPostprocessFuncWin3
?
/highgui/include/opencv2/highgui/highgui.hpp 此C++頭文件,引入: structCvCapture; struct CvVideoWriter;在CV命名空間枚舉相應的一些函數和定義了VideoCapture,VideoWriter類,采用面向對象的思想進行編程,更容易理解和整體把握。
詳細的代碼如下:
namespace cv
{
enum { WINDOW_AUTOSIZE=1 };
CV_EXPORTS_W void namedWindow( const string&winname, int flags CV_DEFAULT(WINDOW_AUTOSIZE) ); CV_EXPORTS_W voiddestroyWindow( const string& winname );CV_EXPORTS_W int startWindowThread(); CV_EXPORTS_W voidsetWindowProperty(const string& winname, intprop_id, double prop_value);//YV CV_EXPORTS_W doublegetWindowProperty(const string& winname, intprop_id);//YV //Only for Qt
//------------------------ CV_EXPORTS
CvFont fontQt(const string& nameFont, intpointSize CV_DEFAULT(-1), Scalar color CV_DEFAULT(Scalar::all(0)),int weight CV_DEFAULT(CV_FONT_NORMAL), int styleCV_DEFAULT(CV_STYLE_NORMAL), int spacing CV_DEFAULT(0));
CV_EXPORTS void addText( const Mat& img, conststring& text, Point org, CvFont font);
CV_EXPORTS void displayOverlay(const string&winname, const string& text, int delayms);
CV_EXPORTS void displayStatusBar(const string&winname, const string& text, int delayms);
?
typedef void (CV_CDECL *OpenGLCallback)(void* userdata);
CV_EXPORTS void createOpenGLCallback(conststring& winname, CvOpenGLCallback callbackOpenGL,void* userdata CV_DEFAULT(0));
CV_EXPORTS void saveWindowParameters(conststring& windowName);
CV_EXPORTS void loadWindowParameters(conststring& windowName);
CV_EXPORTS int startLoop(int (*pt2Func)(int argc, char *argv[]),int argc, char* argv[]);
CV_EXPORTS void stopLoop();
typedef void (CV_CDECL *ButtonCallback)(int state, void*userdata);
CV_EXPORTS int createButton( const string&bar_name, ButtonCallback on_change , void* userdataCV_DEFAULT(NULL), int type CV_DEFAULT(CV_PUSH_BUTTON), boolinitial_button_state CV_DEFAULT(0));//-------------------------
?
CV_EXPORTS_W void imshow( const string& winname,const Mat& mat );
typedef void (CV_CDECL *TrackbarCallback)(int pos, void*userdata);
CV_EXPORTS int createTrackbar( const string&trackbarname, const string& winname, int* value,int count, TrackbarCallback onChange CV_DEFAULT(0), void* userdataCV_DEFAULT(0));
CV_EXPORTS_W int getTrackbarPos( const string&trackbarname, const string& winname );
CV_EXPORTS_W void setTrackbarPos( const string&trackbarname, const string& winname, int pos );
typedef void (*MouseCallback )(int event, int x, int y, intflags, void* param); //! assigns callback for mouse eventsCV_EXPORTS void setMouseCallback( const string&windowName, MouseCallback onMouse, void* param=0); CV_EXPORTS_W Matimread( const string& filename, int flags=1 );CV_EXPORTS_W bool imwrite( const string& filename,const Mat& img, const vector¶ms=vector());
CV_EXPORTS_W Mat imdecode( const Mat& buf, intflags );
?
CV_EXPORTS_W int waitKey(int delay=0);
#ifndef CV_NO_VIDEO_CAPTURE_CPP_API
template<> void CV_EXPORTSPtr::delete_obj();
template<> void CV_EXPORTSPtr::delete_obj();
class CV_EXPORTS_W VideoCapture
{
public:
CV_WRAP VideoCapture();
CV_WRAP VideoCapture(conststring& filename);
CV_WRAP VideoCapture(int device);
virtual ~VideoCapture();
CV_WRAP virtual bool open(conststring& filename);
?
CV_WRAP virtual bool isOpened()const;
CV_WRAP virtual void release();
CV_WRAP virtual bool grab();
CV_WRAP virtual bool retrieve(CV_OUTMat& image, int channel=0);
?
CV_WRAP virtual bool read(CV_OUTMat& image);
CV_WRAP virtual bool set(int propId,double value);
CV_WRAP virtual double get(intpropId);
protected:
Ptr cap;
};
class CV_EXPORTS_W VideoWriter
{
public:
CV_WRAP VideoWriter();
CV_WRAP VideoWriter(conststring& filename, int fourcc, double fps, SizeframeSize, bool isColor=true);
virtual ~VideoWriter(); C
V_WRAP virtual bool open(conststring& filename, int fourcc, double fps, SizeframeSize, bool isColor=true);
CV_WRAP virtual bool isOpened()
const; virtualVideoWriter& operator<< (const Mat&image);
CV_WRAP virtual void write(constMat& image);
protected:
Ptr writer;
};
?
modulescoreincludeopencv
前面的是一些宏定義,是為了兼容C,C++。對于一些函數的調用方式,建議補充一點補充知識:http://blog.csdn.net/yongdun_007/archive/2010/12/21/6090281.aspx,這個頭文件是很重要的一個文件,建議大家都看看,這里定義了opencv用到的所有的數據類型和結構。詳細如下:
types_c.h包括:常用的宏指令和內聯函數,隨機數的生成,圖像數據類型,矩陣數據類型,多維稠密矩陣,多維稀疏矩陣,稀疏矩陣迭代,直方圖,其他數據類型定義(包括矩形,終止準則,點和變量,size變量和Box變量,片和部分,尺度或者角度),動態數據結構(包括內存存儲,序列,節點或者集,圖結構,鏈和輪廓),序列類型,序列的讀/寫操作,對序列的操作(包括圖的微操作),保持數據結構的穩定性,系統數據類型。
?
常用的宏指令和內聯函數:
#define CV_PI?
#define CV_LOG20.693147180559945309417232
?
#define CV_SWAP(a,b,t) ((t) = (a), (a) = (b), (b) =(t))//交換a,b
?
#ifndef MIN
#define MIN(a,b)?
#endif
?
#ifndef MAX
#define MAX(a,b)?
#endif
?
?
#define?
?
#define?
?
?
#ifndef __cplusplus
#define?
#else
#define?
#endif
#define?
#define?
?
// 返回和參數最接近的整數值
CV_INLINE?
?
//返回不大于參數的最大整數值
CV_INLINE?
?
//返回不小于參數的最小整數值
CV_INLINE?
?
//對參數開平方并進行求倒
#define cvInvSqrt(value) ((float)(1./sqrt(value)))
//對參數開平方
#define cvSqrt(value)?
?
//判定是否為合法數
CV_INLINE int cvIsNaN( double value )
//判定是否為無窮?
CV_INLINE int cvIsInf( double value )
?
隨機數的生成
?
typedef uint64 CvRNG;
?
//初始化隨機數生成器狀態
CV_INLINE CvRNG cvRNG( int64 seed CV_DEFAULT(-1))
//返回32位無符號整型并更新RNG
CV_INLINE unsigned cvRandInt( CvRNG* rng )
//返回浮點型隨機數并更新RNG
CV_INLINE double cvRandReal( CvRNG* rng )
?
圖像數據類型
?
#ifndef HAVE_IPL
?
?
?
//定義深度位數
#define IPL_DEPTH_SIGN 0x80000000
#defineIPL_DEPTH_1U?
#defineIPL_DEPTH_8U?
#defineIPL_DEPTH_16U?
#defineIPL_DEPTH_32F?
?
//定義有符號深度位數
#define IPL_DEPTH_8S?
#define IPL_DEPTH_16S (IPL_DEPTH_SIGN|16)
#define IPL_DEPTH_32S (IPL_DEPTH_SIGN|32)
?
//定義數據順序
#define IPL_DATA_ORDER_PIXEL?
#define IPL_DATA_ORDER_PLANE?
?
//定義圖像原點位置
#define IPL_ORIGIN_TL 0 //左上
#define IPL_ORIGIN_BL 1 //左下
?
//定義掃描線位數
#define IPL_ALIGN_4BYTES?
#defineIPL_ALIGN_8BYTES?
#define IPL_ALIGN_16BYTES 16
#define IPL_ALIGN_32BYTES 32
?
//定義掃描線對齊
#defineIPL_ALIGN_DWORD?
#defineIPL_ALIGN_QWORD?
?
//定義掃描線寬度狀態
#defineIPL_BORDER_CONSTANT?
#define IPL_BORDER_REPLICATE?
#defineIPL_BORDER_REFLECT?
#defineIPL_BORDER_WRAP?
?
//定義圖像結構體
typedef struct _IplImage
{
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
}
IplImage;
?
//定義圖像分塊信息結構體
typedef struct _IplTileInfo IplTileInfo;
?
//定義圖像感興趣區域
typedef struct _IplROI
{
?
?
?
?
?
}
IplROI;
?
//定義卷積核結構體
typedef struct _IplConvKernel
{
?
?
?
?
?
?
}
IplConvKernel;
?
//定義快速卷積核結構體
typedef struct _IplConvKernelFP
{
?
?
?
?
?
}
IplConvKernelFP;
?
#define IPL_IMAGE_HEADER 1
#defineIPL_IMAGE_DATA?
#defineIPL_IMAGE_ROI?
?
#endif
?
//定義邊界模式
#defineIPL_BORDER_REFLECT_101?
#defineIPL_BORDER_TRANSPARENT?
?
#define IPL_IMAGE_MAGIC_VAL?
#define CV_TYPE_NAME_IMAGE "opencv-image"
?
#define CV_IS_IMAGE_HDR(img)
?
?
#define CV_IS_IMAGE(img)
?
?
//定義存儲在圖像的雙精度數據
#define IPL_DEPTH_64F?
?
//定義從給定圖像,給定數據類型,給定坐標(col,row)獲取圖像像素值
#define CV_IMAGE_ELEM( image, elemtype, row, col)?
(((elemtype*)((image)->imageData +(image)->widthStep*(row)))[(col)])
?
?
矩陣數據類型
?
//
#defineCV_CN_MAX?
#defineCV_CN_SHIFT?
#define CV_DEPTH_MAX?
?
//定義矩陣數據類型
#define CV_8U?
#define CV_8S?
#define CV_16U?
#define CV_16S?
#define CV_32S?
#define CV_32F?
#define CV_64F?
#define CV_USRTYPE1 7
?
//
#defineCV_MAT_DEPTH_MASK?
#defineCV_MAT_DEPTH(flags)?
?
//
#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1)<< CV_CN_SHIFT))
#define CV_MAKE_TYPE CV_MAKETYPE
?
//
#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))
?
//
#define CV_8SC1 CV_MAKETYPE(CV_8S,1)
#define CV_8SC2 CV_MAKETYPE(CV_8S,2)
#define CV_8SC3 CV_MAKETYPE(CV_8S,3)
#define CV_8SC4 CV_MAKETYPE(CV_8S,4)
#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))
?
//
#define CV_16UC1 CV_MAKETYPE(CV_16U,1)
#define CV_16UC2 CV_MAKETYPE(CV_16U,2)
#define CV_16UC3 CV_MAKETYPE(CV_16U,3)
#define CV_16UC4 CV_MAKETYPE(CV_16U,4)
#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))
?
//
#define CV_16SC1 CV_MAKETYPE(CV_16S,1)
#define CV_16SC2 CV_MAKETYPE(CV_16S,2)
#define CV_16SC3 CV_MAKETYPE(CV_16S,3)
#define CV_16SC4 CV_MAKETYPE(CV_16S,4)
#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))
?
//
#define CV_32SC1 CV_MAKETYPE(CV_32S,1)
#define CV_32SC2 CV_MAKETYPE(CV_32S,2)
#define CV_32SC3 CV_MAKETYPE(CV_32S,3)
#define CV_32SC4 CV_MAKETYPE(CV_32S,4)
#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))
?
//
#define CV_32FC1 CV_MAKETYPE(CV_32F,1)
#define CV_32FC2 CV_MAKETYPE(CV_32F,2)
#define CV_32FC3 CV_MAKETYPE(CV_32F,3)
#define CV_32FC4 CV_MAKETYPE(CV_32F,4)
#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))
?
//
#define CV_64FC1 CV_MAKETYPE(CV_64F,1)
#define CV_64FC2 CV_MAKETYPE(CV_64F,2)
#define CV_64FC3 CV_MAKETYPE(CV_64F,3)
#define CV_64FC4 CV_MAKETYPE(CV_64F,4)
#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))
?
//
#define CV_AUTO_STEP?
#define CV_WHOLE_ARR?
?
//
#defineCV_MAT_CN_MASK?
#defineCV_MAT_CN(flags)?
#defineCV_MAT_TYPE_MASK?
#defineCV_MAT_TYPE(flags)?
#define CV_MAT_CONT_FLAG_SHIFT?
#defineCV_MAT_CONT_FLAG?
#defineCV_IS_MAT_CONT(flags)?
#defineCV_IS_CONT_MAT?
#defineCV_SUBMAT_FLAG_SHIFT?
#defineCV_SUBMAT_FLAG?
#defineCV_IS_SUBMAT(flags)?
?
//
#defineCV_MAGIC_MASK?
#defineCV_MAT_MAGIC_VAL?
#defineCV_TYPE_NAME_MAT?
?
//定義矩陣結構體
typedef struct CvMat
{
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
#ifdef __cplusplus
?
?
?
?
?
?
?
?
?
?
?
#else
?
?
#endif
?
}
CvMat;
?
//判斷矩陣頭指針
#define CV_IS_MAT_HDR(mat)
?
?
?
?
//
#define CV_IS_MAT_HDR_Z(mat)
?
?
?
?
//
#define CV_IS_MAT(mat)
?
?
//
#define CV_IS_MASK_ARR(mat)
?
?
#define CV_ARE_TYPES_EQ(mat1, mat2)
?
?
//
#define CV_ARE_CNS_EQ(mat1, mat2)
?
?
//
#define CV_ARE_DEPTHS_EQ(mat1, mat2)
?
?
//
#define CV_ARE_SIZES_EQ(mat1, mat2)
?
?
#define CV_IS_MAT_CONST(mat)?
?
?
//
?
#define CV_ELEM_SIZE1(type)
?
?
//
?
#define CV_ELEM_SIZE(type)
?
?
//
#define IPL2CV_DEPTH(depth)
?
?
?
?
//初始化矩陣
?
CV_INLINE CvMat cvMat( int rows, int cols, int type, void* dataCV_DEFAULT(NULL))
?
//快速將數據添加到矩陣
#define CV_MAT_ELEM_PTR_FAST( mat, row, col, pix_size)?
?
?
?
?
//快速將數據添加到矩陣(1)
#define CV_MAT_ELEM_PTR( mat, row, col)?
?
?
//快速將數據添加到矩陣(2)
#define CV_MAT_ELEM( mat, elemtype, row, col)?
?
?
//從矩陣中獲取數據
CV_INLINE?
?
//將數據添加到矩陣
CV_INLINE?
?
//設置矩陣數據類型
CV_INLINE int cvIplDepth( int type )
?
多維稠密矩陣
?
//
#defineCV_MATND_MAGIC_VAL?
#defineCV_TYPE_NAME_MATND?
?
//
#defineCV_MAX_DIM?
#defineCV_MAX_DIM_HEAP?
?
//定義稠密矩陣結構體
typedef struct CvMatND
{
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
}
CvMatND;
?
//
#define CV_IS_MATND_HDR(mat)
?
?
//
#define CV_IS_MATND(mat)
?
?
多維稀疏矩陣
?
//
#defineCV_SPARSE_MAT_MAGIC_VAL?
#defineCV_TYPE_NAME_SPARSE_MAT?
?
//
struct CvSet;
?
//定義稀疏矩陣結構體
typedef struct CvSparseMat
{
?
?
?
?
?
?
?
?
?
?
?
}
CvSparseMat;
?
//
#define CV_IS_SPARSE_MAT_HDR(mat)
?
?
?
//
#define CV_IS_SPARSE_MAT(mat)
?
?
稀疏矩陣迭代
?
//定義稀疏矩陣迭代體結構體
typedef struct CvSparseNode
{
?
?
}
CvSparseNode;
?
//定義稀疏矩陣迭代器
typedef struct CvSparseMatIterator
{
?
?
?
}
CvSparseMatIterator;
?
#defineCV_NODE_VAL(mat,node)?
#defineCV_NODE_IDX(mat,node)?
?
直方圖
?
typedef int CvHistType;
?
//
#defineCV_HIST_MAGIC_VAL?
#define CV_HIST_UNIFORM_FLAG?
?
//維區域是否設置的標簽
#defineCV_HIST_RANGES_FLAG?
?
//定義矩陣狀態
#defineCV_HIST_ARRAY?
#defineCV_HIST_SPARSE?
#defineCV_HIST_TREE?
?
?
#defineCV_HIST_UNIFORM?
?
//定義直方圖結構體
typedef struct CvHistogram
{
?
?
?
?
?
}
CvHistogram;
?
//
#define CV_IS_HIST( hist )
?
?
?
?
//
#define CV_IS_UNIFORM_HIST( hist )
?
?
//
#define CV_IS_SPARSE_HIST( hist )
?
?
//
#define CV_HIST_HAS_RANGES( hist )
?
?
//
?
其他數據類型應用定義------矩形
?
//定義矩形結構體
typedef struct CvRect
{
?
?
?
?
}
CvRect;
?
//矩形初始化
CV_INLINE?
{
?
?
?
?
?
?
?
?
}
?
//在感興趣通道上設置圖的感興趣區域
CV_INLINE?
?
//獲取感興趣區域的矩形大小
CV_INLINE?
?
其他數據類型應用定義------終止準則
?
//
#defineCV_TERMCRIT_ITER?
#define CV_TERMCRIT_NUMBER?
#defineCV_TERMCRIT_EPS?
?
//定義迭代算法的終止準則結構體
typedef struct CvTermCriteria
{
?
?
?
}
CvTermCriteria;
?
//初始化終止準則
CV_INLINE?
?
其他數據類型應用定義------點和變量
?
//定義整型二維點
typedef struct CvPoint
{
?
?
}
CvPoint;
?
//初始化二維點
CV_INLINE?
{
?
?
?
?
?
?
}
?
//定義浮點型二維點
typedef struct CvPoint2D32f
{
?
?
}
CvPoint2D32f;
?
//初始化浮點型二維點
CV_INLINE?
{
?
?
?
?
?
?
}
?
//
CV_INLINE?
{
?
}
?
?
CV_INLINE?
{
?
?
?
?
?
}
?
//定義浮點型三維點
typedef struct CvPoint3D32f
{
?
?
?
}
CvPoint3D32f;
?
//初始化浮點型三維點
CV_INLINE?
{
?
?
?
?
?
?
?
}
?
//定義雙精度型二維點
typedef struct CvPoint2D64f
{
?
?
}
CvPoint2D64f;
?
//初始化雙精度型二維點
CV_INLINE?
{
?
?
?
?
?
?
}
?
//定義雙精度型三維點
typedef struct CvPoint3D64f
{
?
?
?
}
CvPoint3D64f;
?
//初始化雙精度型三維點
CV_INLINE?
{
?
?
?
?
?
?
?
}
?
?
其他數據類型應用定義------size變量和Box箱變量
?
//定義size
typedef struct
{
?
?
}
CvSize;
?
//初始化size
CV_INLINE?
{
?
?
?
?
?
?
}
?
//定義二維浮點型size
typedef struct CvSize2D32f
{
?
?
}
CvSize2D32f;
?
//初始化二維浮點型size
CV_INLINE?
{
?
?
?
?
?
?
}
?
//定義二維箱
typedef struct CvBox2D
{
?
?
?
?
}
CvBox2D;
?
//定義線性迭代狀態
typedef struct CvLineIterator
{
?
?
?
?
?
?
?
?
?
}
CvLineIterator;
?
?
?
其他數據類型應用定義------片,部分
?
//定義片
typedef struct CvSlice
{
?
}
CvSlice;
?
//初始化片
CV_INLINE?
{
?
?
?
?
?
}
?
#define CV_WHOLE_SEQ_END_INDEX 0x3fffffff
#define CV_WHOLE_SEQ?
?
?
其他數據類型應用定義------尺度,角度
?
//定義角度結構體
typedef struct CvScalar
{
?
}
CvScalar;
?
//初始化角度
CV_INLINE?
?
{
?
?
?
?
}
?
?
CV_INLINE?
{
?
?
?
?
}
?
CV_INLINE?
{
?
?
?
?
?
?
}
動態數據結構-內存存儲
?
//定義內存塊結構
typedef struct CvMemBlock
{
?
?
}
CvMemBlock;
?
#defineCV_STORAGE_MAGIC_VAL?
?
typedef struct CvMemStorage
{
?
?
?
?
?
?
}
CvMemStorage;
?
#define CV_IS_STORAGE(storage)?
?
?
?
?
typedef struct CvMemStoragePos
{
?
?
}
CvMemStoragePos;
?
?
動態數據結構-序列(線性)
?
//定義序列塊結構體
typedef struct CvSeqBlock
{
?
?
?
?
?
?
}
CvSeqBlock;
?
?
//定義序列節點
#defineCV_TREE_NODE_FIELDS(node_type)?
?
?
?
?
?
?
?
//讀和寫序列(動態的添加和刪除元素)?
?
?
?
?
?
?
?
?
?
?
//定義序列結構體
typedef struct CvSeq
{
?
}
CvSeq;
?
#defineCV_TYPE_NAME_SEQ?
#defineCV_TYPE_NAME_SEQ_TREE?
?
動態數據結構-節點(集)
(節點順序是不被保護的,他們可看成介于元素間的空隙,但被插入后就保留在該地方,判斷有元素,看MSB‘mose-significantor sign bit’的標志位)
?
//定義序列節點屬性
#defineCV_SET_ELEM_FIELDS(elem_type)?
?
?
?
//設置序列元素
typedef struct CvSetElem
{
?
}
CvSetElem;
?
//
#defineCV_SET_FIELDS()?
?
?
?
?
//
typedef struct CvSet
{
?
}
CvSet;
?
?
#define CV_SET_ELEM_IDX_MASK?
#define CV_SET_ELEM_FREE_FLAG?
?
//定義元素指針被設置與否
#define CV_IS_SET_ELEM( ptr )?
?
動態數據結構-圖結構
?
?
?
//定義圖邊屬性
#defineCV_GRAPH_EDGE_FIELDS()?
?
?
?
?
?
?
//定義圖節點屬性
#defineCV_GRAPH_VERTEX_FIELDS()?
?
?
?
//定義圖邊結構體
typedef struct CvGraphEdge
{
?
}
CvGraphEdge;
?
//定義圖節點結構體
typedef struct CvGraphVtx
{
?
}
CvGraphVtx;
?
//定義二維圖
typedef struct CvGraphVtx2D
{
?
?
}
CvGraphVtx2D;
?
?
?
//定義圖屬性
#define?
?
?
?
//定義圖結構
typedef struct CvGraph
{
?
}
CvGraph;
?
#define CV_TYPE_NAME_GRAPH "opencv-graph"
?
動態數據結構-鏈和輪廓
?
//定義鏈結構
typedef struct CvChain
{
?
?
}
CvChain;
?
//定義輪廓屬性
#define CV_CONTOUR_FIELDS()?
?
?
?
?
?
//定義輪廓結構體
typedef struct CvContour
{
?
}
CvContour;
?
typedef CvContour CvPoint2DSeq;
?
序列類型
?
//表示稠密序列
#defineCV_SEQ_MAGIC_VAL?
#define CV_IS_SEQ(seq)
?
?
//表示稀疏序列
#defineCV_SET_MAGIC_VAL?
#define CV_IS_SET(set)
?
?
//表示稠密序列元素位數
#defineCV_SEQ_ELTYPE_BITS?
#defineCV_SEQ_ELTYPE_MASK?
?
//
#defineCV_SEQ_ELTYPE_POINT?
#defineCV_SEQ_ELTYPE_CODE?
?
//
#defineCV_SEQ_ELTYPE_GENERIC?
#defineCV_SEQ_ELTYPE_PTR?
#defineCV_SEQ_ELTYPE_PPOINT?
#defineCV_SEQ_ELTYPE_INDEX?
#defineCV_SEQ_ELTYPE_GRAPH_EDGE?
#defineCV_SEQ_ELTYPE_GRAPH_VERTEX?
#defineCV_SEQ_ELTYPE_TRIAN_ATR?
#define CV_SEQ_ELTYPE_CONNECTED_COMP0?
#defineCV_SEQ_ELTYPE_POINT3D?
?
//表示稠密序列類型位數
#defineCV_SEQ_KIND_BITS?
#defineCV_SEQ_KIND_MASK?
?
//稠密序列的三種類型
#defineCV_SEQ_KIND_GENERIC?
#defineCV_SEQ_KIND_CURVE?
#defineCV_SEQ_KIND_BIN_TREE?
?
//稀疏序列的三種類型
#defineCV_SEQ_KIND_GRAPH?
#defineCV_SEQ_KIND_SUBDIV2D?
?
#defineCV_SEQ_FLAG_SHIFT?
?
//曲線序列的類型標志
#defineCV_SEQ_FLAG_CLOSED?
#defineCV_SEQ_FLAG_SIMPLE?
#defineCV_SEQ_FLAG_CONVEX?
#defineCV_SEQ_FLAG_HOLE?
?
//圖序列的類型標志
#define CV_GRAPH_FLAG_ORIENTED (1<< CV_SEQ_FLAG_SHIFT)
?
#defineCV_GRAPH?
#defineCV_ORIENTED_GRAPH?
?
//定義點集
#defineCV_SEQ_POINT_SET?
#defineCV_SEQ_POINT3D_SET?
#defineCV_SEQ_POLYLINE?
#defineCV_SEQ_POLYGON?
#defineCV_SEQ_CONTOUR?
#define CV_SEQ_SIMPLE_POLYGON?
?
//定義曲線鏈表
#defineCV_SEQ_CHAIN?
#defineCV_SEQ_CHAIN_CONTOUR?
?
//用二叉樹表示輪廓集
#defineCV_SEQ_POLYGON_TREE?
?
//連接部分的序列表示
#define CV_SEQ_CONNECTED_COMP?
?
//整數表示的序列
#defineCV_SEQ_INDEX?
?
#define CV_SEQ_ELTYPE( seq)?
#define CV_SEQ_KIND( seq)?
?
//標記檢測
#define CV_IS_SEQ_INDEX( seq)?
?
?
#define CV_IS_SEQ_CURVE( seq)?
#define CV_IS_SEQ_CLOSED( seq)?
#define CV_IS_SEQ_CONVEX( seq)?
#define CV_IS_SEQ_HOLE( seq)?
#define CV_IS_SEQ_SIMPLE( seq)?
?
//類型檢測
#define CV_IS_SEQ_POINT_SET( seq )
?
?
#define CV_IS_SEQ_POINT_SUBSET( seq )
?
?
#define CV_IS_SEQ_POLYLINE( seq)?
?
?
#define CV_IS_SEQ_POLYGON( seq)?
?
?
#define CV_IS_SEQ_CHAIN( seq)?
?
?
#define CV_IS_SEQ_CONTOUR( seq )?
?
?
#define CV_IS_SEQ_CHAIN_CONTOUR( seq )
?
?
#define CV_IS_SEQ_POLYGON_TREE( seq )
?
?
?
#define CV_IS_GRAPH( seq)?
?
?
#define CV_IS_GRAPH_ORIENTED( seq)?
?
?
#define CV_IS_SUBDIV2D( seq )?
?
?
序列的讀/寫操作?
?
//定義序列寫的屬性
#defineCV_SEQ_WRITER_FIELDS()?
?
?
?
?
?
?
?
//定義序列寫結構體
typedef struct CvSeqWriter
{
?
}
CvSeqWriter;
?
?
//定義序列讀的屬性
#defineCV_SEQ_READER_FIELDS()?
?
?
?
?
?
?
?
?
?
?
//定義序列讀的結構體
typedef struct CvSeqReader
{
?
}
CvSeqReader;
?
對序列的操作
?
#define?
?
(?
?
?
?
?
?
#define CV_GET_SEQ_ELEM( elem_type, seq, index ) CV_SEQ_ELEM((seq), elem_type, (index) )
?
//在序列中增加元素
#define CV_WRITE_SEQ_ELEM_VAR( elem_ptr, writer)?
{?
?
?
?
?
?
?
}
?
#define CV_WRITE_SEQ_ELEM( elem, writer)?
{?
?
?
?
?
?
?
?
?
}
?
?
//向前移動讀序列位置
#define CV_NEXT_SEQ_ELEM( elem_size, reader)?
{?
?
?
?
?
}
?
?
//向前移動讀序列位置
#define CV_PREV_SEQ_ELEM( elem_size, reader)?
{?
?
?
?
?
}
?
//讀序列中元素并向前移動讀位置
#define CV_READ_SEQ_ELEM( elem, reader)?
{?
?
?
?
}
?
//讀序列中元素并向前移動讀位置
#define CV_REV_READ_SEQ_ELEM( elem, reader)?
{?
?
?
?
}
?
?
#define CV_READ_CHAIN_POINT( _pt, reader)?
{?
?
?
?
?
?
?
?
?
}
?
#define CV_CURRENT_POINT( reader )?
#define CV_PREV_POINT( reader)?
?
//讀邊序列
#define CV_READ_EDGE( pt1, pt2, reader)?
{?
?
?
?
?
?
?
?
}
?
?
對序列的操作-圖的微操作
?
?
//返回給定頂點的圖邊緣?
#define?
?
?
?
?
保持數據結構的連續性的說明
?
//文件存儲的“黑箱”定義
typedef struct CvFileStorage CvFileStorage;
?
//存儲標記
#defineCV_STORAGE_READ?
#defineCV_STORAGE_WRITE?
#defineCV_STORAGE_WRITE_TEXT?
#define CV_STORAGE_WRITE_BINARY?
#defineCV_STORAGE_APPEND?
?
//屬性列表
typedef struct CvAttrList
{
?
?
}
CvAttrList;
?
CV_INLINE CvAttrList cvAttrList( const char** attrCV_DEFAULT(NULL),
?
{
?
?
?
?
?
}
?
struct CvTypeInfo;
?
#defineCV_NODE_NONE?
#defineCV_NODE_INT?
#defineCV_NODE_INTEGER?
#defineCV_NODE_REAL?
#defineCV_NODE_FLOAT?
#defineCV_NODE_STR?
#defineCV_NODE_STRING?
#defineCV_NODE_REF?
#defineCV_NODE_SEQ?
#defineCV_NODE_MAP?
#defineCV_NODE_TYPE_MASK?
?
#define CV_NODE_TYPE(flags)?
?
?
#defineCV_NODE_FLOW?
#defineCV_NODE_USER?
#defineCV_NODE_EMPTY?
#defineCV_NODE_NAMED?
?
#defineCV_NODE_IS_INT(flags)?
#defineCV_NODE_IS_REAL(flags)?
#defineCV_NODE_IS_STRING(flags)?
#defineCV_NODE_IS_SEQ(flags)?
#defineCV_NODE_IS_MAP(flags)?
#define CV_NODE_IS_COLLECTION(flags) (CV_NODE_TYPE(flags)>= CV_NODE_SEQ)
#defineCV_NODE_IS_FLOW(flags)?
#defineCV_NODE_IS_EMPTY(flags)?
#defineCV_NODE_IS_USER(flags)?
#defineCV_NODE_HAS_NAME(flags)?
?
#define CV_NODE_SEQ_SIMPLE 256
#define CV_NODE_SEQ_IS_SIMPLE(seq) (((seq)->flags& CV_NODE_SEQ_SIMPLE) != 0)
?
typedef struct CvString
{
?
?
}
CvString;
?
//所有的元素名字以哈希表中,增加搜索速度
typedef struct CvStringHashNode{
?
?
?
}
CvStringHashNode;
?
typedef struct CvGenericHash CvFileNodeHash;
?
?
typedef struct CvFileNode
{
?
?
?
?
?
?
?
?
?
?
}
CvFileNode;
?
#ifdef __cplusplus
extern "C" {
#endif
typedef int (CV_CDECL *CvIsInstanceFunc)( const void* struct_ptr);
typedef void (CV_CDECL *CvReleaseFunc)( void** struct_dblptr);
typedef void* (CV_CDECL *CvReadFunc)( CvFileStorage* storage,CvFileNode* node );
typedef void (CV_CDECL *CvWriteFunc)( CvFileStorage* storage,const char* name,
?
typedef void* (CV_CDECL *CvCloneFunc)( const void* struct_ptr);
#ifdef __cplusplus
}
#endif
?
typedef struct CvTypeInfo
{
?
?
?
?
?
?
?
?
?
?
}
CvTypeInfo;
?
?
系統數據類型
?
typedef struct CvPluginFuncInfo
{
?
?
?
?
?
}
CvPluginFuncInfo;
?
typedef struct CvModuleInfo
{
?
?
?
?
}
CvModuleInfo;