在較老版本的opencv中可以使用cvsetimageroi方法來設定roi,但是必須使用iplimage指標,現在大部分方法都用mat來儲存,不再使用iplimage指標。
在opencv2之後的版本裡常使用的影象基礎容器為mat,其本體為乙個矩陣,而數字影象就是乙個二維矩陣。
關於mat類,有兩個有點:
第一:不必再手動為其開闢空間。
第二:不必在不需要時立即將空間釋放。
mat類由兩個部分組成,矩陣頭(包含矩陣資訊和指向實際矩陣的乙個指標)和實際矩陣組成。當宣告矩陣而未對其賦值的時候不會有實際的矩陣空間開闢出來。在多個矩陣之間傳遞引數時也只需要傳遞矩陣頭的資訊,而不必要建立多個相同的矩陣。具體看書上的例子。
mata,c;
//只建立矩陣頭 a=
實際開闢記憶體
matb(a);
//拷貝建構函式只傳遞矩陣頭
c=a;
//賦值運算子只傳遞矩陣頭
例子中使用的兩種傳遞矩陣的方法都是只將矩陣頭賦值了乙份。實際上a,b,c三個矩陣頭指標指向的是同乙個矩陣。也就是說改變他們之中的任何乙個另兩個都會隨之改變。
這樣一來,在mat方法裡就有可以直接設定roi的方法。看書上的例子:當然
matd(a,rect(0,
0,100,
100));
//使用矩形界定
mate=a(range::all(),range(1,
3));
//使用行列來界定
當然有時候我們不僅僅想要複製矩陣頭,也想要複製矩陣本身可以使用clone和copyto實現,書上例子如下:
matf=a.clone();
matg;
a.copyto(g);
這樣就可以得到三個一毛一樣,但是又互不相關的矩陣。
OpenCV中Mat類的介紹和使用
自從opencv產生以來,其函式庫一直是基於c介面構建的,因此在最初的幾個opencv版本中,一般使用名為iplimage的c語言結構體在記憶體中儲存影象。直到現在,仍然出現在大多數的舊版教程中。對於opencv1.x時代的基於c語言介面而建的影象儲存格式iplimage 如果在退出前忘記relea...
opencv 中Mat的基礎使用
用一段程式來展示opencv中mat的基礎用法。這個程式將原圖以灰度圖的方式讀入,進行直方圖均衡化處理。include opencv2 highgui highgui.hpp include opencv2 imgproc imgproc.hpp include include using name...
opencv中的Mat詳解
1.初始化 mat the basic image container 最最基本的函式,所有在opencv中都是用mat形式來操作的。初始化乙個mat mat a,c a imread ar 1 imread color mat b a 複製a給b c a 賦值運算 mat d a,rect 10,...