C OpenCV 零散學習總結

2022-05-07 08:09:07 字數 1989 閱讀 3034

opencv中mat基本用法:

mat類 (matrix的縮寫) 是opencv用於處理影象而引入的乙個封裝類。從功能上講,mat類在iplimage結構的基礎上進一步增強,並且,由於引入c++高階程式設計特性,mat類的擴充套件性大大提高。

mat image(240, 320, cv8uc3);第乙個引數是rows,該矩陣的行數;第二個引數是cols,該矩陣的列數;第三個引數是該矩陣元素的型別。這句話表示建立乙個大小為240×320的矩陣,裡面的元素為8位unsigned型,通道數(channel)有3個。

mat::zeros(3, 3, cv32f) + 5;定義個3×3的32bit浮點數矩陣,元素全為0,再將所有元素加上5.0。

c++中vector的at函式:

假設v是乙個vector物件,通常v.at(n)和v[n]是一樣的,前者會檢查是否越界(因此花費的時間稍多),而後者不會(後者越界會導致未定義行為)。

c++優化之使用emplace:

在c++開發過程中,我們經常會用stl的各種容器,比如vector,map,set等,這些容器極大的方便了我們的開發。在使用這些容器的過程中,我們會大量用到的操作就是插入操作,比如vector的push_back,map的insert,set的insert。這些插入操作會涉及到兩次構造,首先是物件的初始化構造,接著在插入的時候會複製一次,會觸發拷貝構造。但是很多時候我們並不需要兩次構造帶來效率的浪費,如果可以在插入的時候直接構造,就只需要構造一次就夠了。

c++11標準已經有這樣的語法可以直接使用了,那就是emplace。vector有兩個函式可以使用:emplace,emplace_back。emplace類似insert,emplace_back類似push_back。

opencv的連通域處理函式

在影象處理過程中,經常會遇到這樣一部分影象,影象的整體部分如果人來看的話一眼就能看出,但是它的內部由於有各種小缺口,導致斷開了,這樣在計算機「眼」裡就被認為是斷開的,為了使影象達到適應人眼的感覺,需要將這些缺口和斷開的口給連線上去,這就需要用到計算機圖形學中的連通域處理技術。給出乙個簡單的連通域處理函式,這個函式是來自opencv著名教程learning opencv中。

這個連通域處理函式的形式:

void connectedcomponents(mat &mask_process,  int poly1_hull0,  float perimscale,  int number = 0,  rect &bounding_box = rect(),  point &contour_centers = point(-1, -1));

引數mask表示的是需要進行連通域處理二值影象。

引數poly1_hull0表示輪廓邊緣是否採用多邊形擬合,如果該引數為1,則表示採用多邊形擬合,否則採用凸包擬合。

引數perimscale是用來將那些小的輪廓去掉,那些小的輪廓時指它的周長小於(mask長+寬)/perimscale。當然你在其內部**也可以該為面積來判斷。

引數num表示實際需要處理最多的輪廓的個數(如果輸入的mask有多個輪廓的話),這裡的處理是指計算出這些輪廓的外接矩形和中心點。預設值為0,表示函式內部不需要處理這些外接矩形和中心點。

引數bbs表示的是處理完後對應輪廓的外接矩形,預設值為rect(),表示不需要返回這些外接矩形。

引數centers表示處理完後對應輪廓的中心點座標,預設值為point(-1, -1),表示不需要返回這些中心點。

c++ memset()函式: 

memset 函式是記憶體賦值函式,用來給某一塊記憶體空間進行賦值的;

包含在標頭檔案中,可以用它對一片記憶體空間逐字節進行初始化;

原型為 :

void *memset(void *s, int v, size_t n);  

這裡s可以是陣列名,也可以是指向某一內在空間的指標;

v為要填充的值;

n為要填充的位元組數;

C 零散學習1

c 零散學習1 結構體 與c語言相似 struct position 宣告和訪問 position enemyposition enemyposition.x 10 物件名.結構體成員變數名 foreach遍歷陣列 foreach int temp in 陣列名 引數陣列與陣列引數 修飾符 型別名 ...

程式設計技巧的零散學習

1 不使用if switch及其他判斷語句如何找出兩個int型變數中的最大值和最小值?int max a b abs a b 2 intmin a b abs a b 2 2 比較運算子 運算順序是從左往右,賦值運算子運算順序從右向左 3 如何使用一條語句實現x是否為2的若干次冪的判斷?如果乙個數為...

Spring 零散總結

1.beanfactory和factorybean的區別 參考自 例如 最常見的factorybean,用於產生回話的工廠 分析 普通bean beanfactory 可存放的物件型別 工廠bean 可產生bean的bean 偽 案例 a 普通bean 相比於工廠bean b 工廠bean 可生產 ...