1. 程式人生 > >OpenCV學習筆記(一)之常用基本資料型別

OpenCV學習筆記(一)之常用基本資料型別

引言

就像C、C++等語言一樣,OpenCV作為一個開源庫,為了便捷及良好的封裝性,它也有很多自己定義的資料型別,這些型別在很多地方都有用到。學習OpenCV首先就需要對它的基本資料型別有個大概的瞭解,這樣在之後開始正式專案時就算遇到各種各樣複雜的資料型別也好回頭再來查詢。

CvPoint 型別

CvPoint型別是隻含有兩個int型變數x,y的結構體,它的變體有CvPoint2D32f和CvPoint3D32f,這兩個結構體的變數型別都是int型,但是前者只含有兩個變數x,y,後者含有三個變數x,y,z。

CvSize 型別

CvSize和CvPoint一樣都只含有兩個變數,為int型變數width和height,儲存的是一幅圖片的大小。它的變體為CvSize2D32f只不過是float型的變數width和height。

CvRect 型別

CvRect含有四個變數分別是x,y,width,height,常用來畫矩形框,如函式rectangle(CV_IN_OUT Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shift=0);
此函式中第一個引數為要輸入的影象,第二個引數為要繪製的矩形框,第三個引數為顏色設定,第四個引數為線寬,後兩個引數使用時基本不設定,保持預設值。類似的畫矩形框的函式還有
cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness CV_DEFAULT(1), int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));


使用方式和前一個函式類似,只不過需要具體設定矩形框的左頂點與右下點的座標。

CvScalar 型別

CvScalar是一個含有1個double型陣列val[4]元素的結構體,陣列元素分別儲存顏色的R、G、B、A值。它還有三個以行內函數形式存在的建構函式(關於C語言的行內函數的意義可以參考連結中的文章 https://blog.csdn.net/21aspnet/article/details/6723896 ),分別是cvScalar()cvRealScalar()cvScalarAll()

IplImage 型別

IplImage型別是openCV中的基本型別,也是我們最常用到的資料型別,它是一個結構體型別,裡面定義了影象大小、顏色通道、位深、影象ROI等在內的眾多資訊,主要用於儲存載入的影象資料。例如:IplImage * image=cvLoadImage(".\\Lena.bmp",1);


image中就儲存類Lena這張圖片的主要資料資訊,方便我們後面呼叫裡面的引數。需要注意的是 上面那種方式是同時建立影象頭並分配影象資料,如果從攝像頭等外設讀入的資料只有影象資料沒有影象頭的情況,那麼會出現有影象資料但是沒有為影象頭分配儲存空間(即,沒有為IplImage*指標分配動態儲存空間),則
需要先呼叫IplImage* cvCreateImageHeader( CvSize size, int depth, int channels )函式建立影象頭,再呼叫void cvSetData( CvArr* arr, void* data, int step )函式指定影象資料,可以理解為將這個新影象的資料指標指向了一個已存在的影象資料上,不存在影象資料儲存空間的分配操作。

CvMat 型別

CvMat是OpenCV中的矩陣結構,可以是一維的、二維的、三維的或者是n維陣列,用於儲存影象資料。與IplImage型別有很多相似之處,甚至於IplImage型別就是派生於CvMat型別。

OpenCV中還有許多資料型別,都是非常有用的,我們最常接觸到的就是上面那些。由於我也是初學者,關於OpenCV中的許多東西都還不熟悉,在此寫下的這些基本資料型別也是為了加深對OpenCV的印象,使自己慢慢對OpenCV有更加深入的瞭解。