opencv筆記

1、             在計算機看來,圖像只是一堆亮度各異的點;一副黑白的尺寸爲M X N 的圖像可以用一個M X N 的矩陣來表示;矩陣中的元素表示這個位置上的像素的亮度,數值越大表示該點越亮。

2、             一般來說,灰度圖用2維矩陣表示,彩色(多通道)圖像用3維矩陣(M X N X 3)表示;對於圖像顯示來說,目前大部分設備都是用無符號8位整數(類型爲CV_8U)表示像素亮度。

3、             Mat:圖像類,通用矩陣類,可以用於創建和操作多維矩陣。

4、             Mat 類可用構造函數創建圖像,或採用creat()函數創建圖像。

5、             模版類Vec,表示一個向量,可用於矩陣元素的表達。

6、             像素值的讀取:(1at()函數:實現讀取矩陣中的某個像素,或對某個像素進行賦值;優缺點:代碼的可讀性高,但效率並不很高,如果要遍歷圖像,並不推薦使用at()函數。

2)迭代器(iterator):遍歷方便;

3)指針(ptr:運行效率高,可靠性不高。

7、選取圖像局部區域的方法:如果將局部區域賦值給新的Mat對象,新的對象與原式對象公用相同的數據區域,並不申請新的內存,因此執行速率都比較快;(1)單行或單列選取:row()函數和col()函數;

2)選取多行或多列:Rang類:Rang(star,end)(注:包含star ,不含end)Rang::all();

3)選取感興趣區域:一種是使用構造函數,如:Mat img(Size320240),CV_8UC3);Mat rot(img,Rect(10,10,100,100))Mat rot(img,Rang(10,100),Rang(10,100));另外一種是使用括號運算符:Mat rot=img(Rect(10,10,100,100))Mat rot=img(Rang(10,100),Rang(10,100));

4)選取對角線元素:diag(int d);d = 0時,表示主對角線;當d >0時,表示主對角線下方第d條次對角線;當d<0時,表示主對角線上方第d條次對角線;

8Mat類的內存管理:Mat類由兩部分組成:矩陣頭(矩陣尺寸、存儲方法、存儲地址等信息)和一個指向所有像素值的矩陣的指針;爲了解決矩陣數據傳遞過大的問題,Opencv使用了引進計數機制;其思路是讓每個Mat對象都有自己的矩陣頭信息,但多個Mat對象可以共享同一個矩陣數據,即讓多個矩陣指針指向同一地址。

9、格式轉換:

1Mat轉換爲IplImage CvMat格式:直接通過賦值操作完成;

2IplImage CvMat轉換爲Mat格式:通過構造函數完成。

10、讀取圖像文件:

Mat imreadconst string & filename, int flags;

Flags >0時,返回3通道圖像;

Flags=0 時,返回單通道圖像;

Flags<0 時,則不對圖像進行通道轉換。

11、寫入圖像文件:

Bool imwrite(conststring& filename, InputArray p_w_picpath, const vector<int> & params =vector<int>());

參數paramsJPEG表示圖像質量,取值範圍:0100,默認95

                            PNG:表示壓縮級別,取值範圍09,默認是3

                            PPMPGMPBM:表示文件是以二進制還是純文本方式存儲,取值爲1時,表示二進制方式存儲,默認爲1

注意:在保存文件時,如果文件已經存在,imwrite()函數不會進行提醒,將會直接覆蓋以前的文件。

12、讀取視頻類:VidieoCapture 既可以從視頻讀取圖像,又可以從攝像頭讀取圖像;可以通過其構造函數打開資源或通過其方法open()函數打開資源,open()函數會調用released()函數,先釋放已經打開的視頻,再打開新視頻。

13、寫視頻類:Videowriter(文件名,編解碼器,幀頻,寬度,高度);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章