OpenCV入門筆記(二)

2021-08-09 14:33:11 字數 3030 閱讀 9654

**

第四章

1.mat

mat是個類,由矩陣頭和志向儲存所有畫素值的矩陣的指標。

opencv的計數機制:每隔mat物件有自己的資訊頭,但是共享乙個矩陣(「=」)。(因為資訊頭不同但是矩陣相同,改變任何物件都會改變矩陣)

《可以建立只引用部分資料的資訊頭,例如建立乙個區域,只需要建立包含資訊的資訊頭即可》

如果複製不光有資訊頭還有矩陣,需要使用函式clone()或copyto().

2.畫素的儲存方法

儲存畫素:指定顏色空間和資料型別。

顏色空間:針對乙個給定的顏色,如何組合顏色元素以對其編碼(rgb)

資料型別:元素定義域

3.建立mat

mat:影象容器類,還是乙個通用的矩陣類

1. 使用mat()建構函式           cv_[位數][帶符號與否][型別字首]c[通道數]

2. 在c\c++中通過建構函式進行初始化(p90)

3. 為已存在的ipiimage指標建立資訊頭(p90)

4. 利用create()函式

5. 採用matlab式的初始化方式

6. 對小矩陣使用逗號分隔式初始化函式

7. 為已存在的物件建立新資訊頭

4.格式化輸出方法

randu()函式產生隨機值

format()可以改變輸出風格

5種語言風格

5.常用資料結構

point:二維座標

scalar:4個元素的陣列,用於傳遞畫素值(bgr)

size:長、寬

rect:x、y、width、height

cvtcolor():顏色空間轉換函式(p98)

6.其他常用知識點(p100)

7.基本圖形繪製

line() ellipse() rectangle() circle() fillpoly()

第五章

1.訪問影象中的畫素

影象縮減:利用除法自動截餘

lut函式:look up table操作 operationsonarray:lut() 用於批量進行影象元素查詢、掃瞄與操作影象

計時函式:gettickcount() gettickfrequency()

方位影象畫素的三種方法:(p112)

1. 指標訪問:c操作符(最快)

2. 迭代器iterator

3. 動態位址計算(最慢)

2.roi區域影象疊加&影象混合

roi和addweighted函式結合使用,對指定區域進行影象混合操作

定義roi兩種方法:矩形區域和指定感興趣行或列(range) range:從其實索引到終止索引(不包括終止索引)的一段連續序列(可以用crange定義range)

**在 (e:\test\opencv_2\roi_mask\roi_mask)中

線性混合操作(p117)

計算陣列加權和:addweighted()函式 dst = src1[i] alpha +src2 beta + gamma;

示例程式:p118

3.分離顏色通道、多通道影象混合(p125)

通道分離:split()函式:多通道陣列分離成幾個單獨通道陣列 **(p126)

通道合併:merge()函式:多個陣列合併成乙個通道的陣列 **(p127)

4.影象對比度、亮度值調整(p131)

點操作:特點:僅僅根據輸入畫素值(有時可以加上某些全域性資訊或引數),來計算相應的輸出畫素值。

對比度:g(x)=a*f(x)+b a可以調節影象對比度,b可以調節影象的亮度

5離散傅利葉變換(p135)

二維影象的傅利葉變換的數學公式,如下圖

高頻部分:影象的細節、紋理資訊;

低頻部分:影象的輪廓資訊——–對影象使用低通濾波器,結果剩下了影象的輪廓

傅利葉變換:影象愛能夠增強和去燥、影象分割之邊緣檢測、影象特徵提取、影象壓縮

dft()函式:對一位維或二維浮點數陣列進行正向或反向的離散傅利葉變換 **(p136)(沒看懂)

1. 返回dft最優尺寸大小:getoptimaldftsize()     提高dft計算速度,來擴充影象

2. 擴充影象邊界:copymakeborder()

3. 計算二維向量的幅值:magnitude()

4. 計算自然對數:log() 計算每個陣列元素絕對值的自然對數

5. 矩陣歸一化:normalize()

示例程式:離散傅利葉變換(p139和p141)

1. 載入原始影象

2. 將影象擴大到合適尺寸 影象尺寸2/3/5的整數倍,計算速度最快(呼叫getoptimaldftsize()得到最佳尺寸、呼叫copymakeborder()用於填充畫素)

3. 為傅利葉變換的結果(實部與虛部)分配儲存空間(每個原影象值---得到兩個影象值)至少將頻域儲存到float格式中,增加乙個額外通道來儲存附屬部分

4. 進行離散傅利葉變換---dft(complexi,complexi)

5. 將複數轉換為幅值 對應幅度值

6. 進行對數尺度縮放 鼓勵也變換的幅值太大,需要取對數

7. 剪下和重分布幅度圖象限 第二步中延擴了影象,現在需要將新增的畫素剔除了 同時需要中心化

8. 歸一化 為了顯示(normalize())

9. 顯示效果圖

輸入輸出xml和yaml檔案

xml:可拓展標識語言。 一種語義/結構化語言

yaml:以資料為中心的語言,不同於以置標語言為重點(但仍然是置標語言)

使用filestorage類操作檔案的使用引導

1. xml、yaml檔案開啟

2. 進行檔案讀寫操作

3. vector(arrays)和maps的輸入和輸出

4. 檔案關閉

詳看p145

本文是碎片化的筆記,詳見書

《OpenCV3程式設計入門》筆記二

採用hsv和hls把顏色分解成色調 飽和度和亮度 明度。這是描述顏色更自然,比如可以通過拋棄最後乙個元素,使演算法對輸入影象的光照條件不敏感。另一種使演算法對輸入影象的光照條件不敏感的方法是採用動態範圍較大的相機。錯誤位置 2.方法二 在c c 中通過建構函式進行初始化 int sz 3 mat l...

Opencv基礎入門筆記02

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

Opencv基礎入門筆記03

mat物件我們在學習影象處理的過程一直在接觸,那麼它到底是個什麼東西呢?當opencv 1.0發布時候沒有mat物件,是個c語言風格的資料結構iplimage來表示記憶體中影象物件,但是opencv開發者在做複雜影象處理演算法分析與計算時候,建立了很多iplimage這樣的資料結構,偶爾最後可能忘記...