opencv中Mat的使用和設定ROI的方法

2021-07-24 16:02:28 字數 927 閱讀 8801

在較老版本的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,...