Opencv基礎入門筆記03

2021-10-01 20:57:35 字數 1816 閱讀 2330

mat物件我們在學習影象處理的過程一直在接觸,那麼它到底是個什麼東西呢?

當opencv 1.0發布時候沒有mat物件,是個c語言風格的資料結構iplimage來表示記憶體中影象物件,但是opencv開發者在做複雜影象處理演算法分析與計算時候,建立了很多iplimage這樣的資料結構,偶爾最後可能忘記釋放記憶體了,這樣演算法就有了記憶體洩漏,導致開發者浪費很多精力去尋找這個錯誤,這個已經跟影象處理演算法沒有關係了,但是它卻困擾了很多opencv開發者。intel發現自己做的庫居然這麼渣,廣大群眾不滿意,決定從opencv 2.0開始使用乙個新的記憶體物件mat來表示記憶體中的影象物件。它是c++風格的資料結構自動實現記憶體分配與**,這樣opencv開發者就再也不用擔心因為使用opencv的影象物件資料結構而導致記憶體洩漏問題了。是物件導向資料結構,分類與頭部兩個部分。

常用的簡單構造mat類方法

1.直接通過讀取創造mat類;

mat img = imread("路徑下");

2.利用create函式

mat img; img.create(src.size(),src.type());

3.利用scalar函式

mat img; src.copyto(img); img=scalar(0,233,55);

4.利用自身的構造方法mat img=mat::zeros(src.size(),src.type());

mat img=mat::ones(src.size(),src.type());

mat img=mat::eye(src.size(),src.type());

5.利用clone函式

mat img = src.clone();

mat類的其他用法

1.建立陣列矩陣(如上一節的矩陣掩模)

mat kernel = (mat_(3,3)<<0,0,0,1,1,1,0,0,0);

2.複製拷貝的頭與指標

mat b(a);不同於clone(),與copyto()

**演示

int main() 

imshow("src", src_image);

//方法2

mat img2;

img2.create(src_image.size(), src_image.type());

imshow("2", img2);

//方法3

mat img3;

src_image.copyto(img3);

img3 = scalar(0, 0, 44);

imshow("3", img3);

//方法4

mat img4= mat::zeros(src_image.size(),src_image.type());

imshow("4", img4);

//mat定義陣列矩陣

mat kernel = (mat_(4,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0,0,0,0);//3*3的卷積核

imshow("kernel", kernel);

waitkey(0);

return 0;

}

Opencv基礎入門筆記02

我們都知道,是由乙個個畫素點組成的,那麼,我理解為乙個巨大的矩陣,而矩陣掩模,就是,自己定義了乙個特定的矩陣 kernel 或者叫 mask 即掩模,然後,進行對矩陣的叉乘,是卷積濾波的一種體現,然後使呈現自己想要的樣子。實際上,掩膜mask是一種影象濾鏡的模板,實用掩膜經常處理的是遙感影象。當提取...

Opencv基礎入門筆記04

今天覆習影象操作,包括影象的取反,二值化,作與運算等!1.簡述 我們知道灰度圖由0 255表示,0為黑,255為白,則從位操作的角度出發,純黑色為0,不是純黑色為1,所以在一些純白色,或者純黑色背景裡,先轉為灰度圖,利用閾值將非背景色的內容 灰度值不是0和255 摳出來作為模板,再與原圖做位操作,進...

Opencv基礎入門筆記06

1.影象對比度和亮度 首先,我們先說影象的變換,可以分成以下兩類 1 畫素變換 在畫素變換中,僅僅根據輸入的畫素值 有時可能加上某些全域性資訊或者引數 來計算相應的輸出畫素值。該類變換的常見方法有亮度和對比度調整 顏色校正和顏色變換等等。該類變換可以用下面的通用變換公式來表示。f x,y 表示原影象...