OpenCV 4 常用資料結構和函式

2021-09-17 00:00:25 字數 3416 閱讀 2168

point 類資料結構表示了 二維座標系下的點,即由其影象座標 x 和 y 指定的 2d點。用法如下 :

point point;

point.x = 10;

point.y = 8 ;

//或者

point point= poin 七 (10 , 8) ;

另外 , 在 opencv 中有如下定義:

typedef point_point2i;

typedef point2i point;

typedef point_point2f;

所以, point 、 point2i 、 point 互相等價 , point 、 point2f 互相等價 。

scalar()表示具有 4 個元素的陣列,在 opencv 中被大品用於傳遞畫素值,如 rgb顏色值。 而 rgb 顏色值為三個引數,其實對於 scalar 函式來說,如果用不到第四個引數 , 則不需要寫 出來 ; 若只寫三個引數, opencv 會認為我們就想表示三個引數。

來看個例子 。 如果給出以下顏色引數表示式:

scalar(a, b, c )

那麼定義的 rgb 顏色值:紅色分量為 c , 綠色分批為 b, 藍色分量為 a 。

scalar 類的源頭為 scalar_類 ,而 scalar_類是 vec4x 的乙個變種,我們常用的sca lar 其實就是 scalar_。 這就解釋了為什麼很多函式的引數輸入可以是mat, 也可以是 scalar。

typedef size_size2i;

typedef size_size2l;

typedef size_size2f;

typedef size_size2d;

typedef size2i size;

templateclass size_

;

可以看到 size_模板類的內 部又是過載 了一些構造函 數 , 其中 , 我們使用頻率

最高的是下面這個建構函式 :

size_(_tp _width, _tp _height);
另外,**末尾定義了模板型別的寬度和高度 :

_ tp width , height ; //寬度和高度
於是我們可以用 ***.widtb 和 ***.beigbt 來分別表示其寬度和高度。

下面給出 乙個示例, 方便大家理解。

size(s, 5); //構造出的 size 寬度和高度都為 5, 即 ***.width 和 *** . height 都為 5
rect 類 的成員變晝有 x 、 y 、 width 、 height, 分 別 為左上角點 的 座標和矩形的 寬和 高。

常用的成員函式有 :

值得注意的是 , 如果想求兩個矩

形 的交集和並集 , 可以用如下格式 :

rect rect = rectl & rect2;

rect rect = rect1 | rect2;

如果想讓矩形進行平移操作和縮放操作 , 甚至可以這樣寫 :

rect rectshift = rect + point;

rect rectscale = rect + size ;

cvtcolor() 函式是 opencv 裡的顏色空間轉換函式 ,可以實現rgb 顏色向hsv 、 hsi 等顏色空間的轉換 ,也可以轉換為灰度影象 。

void cvtcolor( inputarray src, 

outputarray dst,

int code,

int dstcn = 0 );

下面是乙個呼叫示例:

cvtcolor(srcimage , dstimage , color_gray2bgr ); //轉換原始圖為灰度圖
隨著 opencv 版本 的公升級, cvtcolor()函式對千顏色空間種類的支待也是越來越多 。

另 外, 在這裡需要再次提醒大家 的 是, opencv預設的 通道儲存順序是 bgr , 即藍綠紅,而不是 rgb 。

例項**:

/***標頭檔案包含部分***/

#include "opencv2/imgproc/imgproc.hpp"

#include "opencv2/highgui/highgui.hpp"

#include /***命名空間宣告部分***/

using namespace cv;

using namespace std;

int main(int argc, char** ar**)

matx 是個輕扯級的 mat, 必須在使用前規定好大小 , 比如乙個 2*3 的 float 型的 matx , 可 以聲 明 為 matx23f。

vec 是 matx 的乙個派生類 , 是乙個一維的 matx, 跟 vector很相似 。在 opency原始碼中有如下定義 。

templateclass vec : public matx<_tp cn>
range 類其實就是為了使 opencv 的使用更像 matlab 而產生的。 比如range::all()其實就是 matlab 裡的符號。而 range(a, b)其實就是 matlab中的 a: b, 注意這裡的 a 和 b 都應為整型 。

opencv 中防止 記憶體溢位的函式有 alignptr、 ali gns ize、 allocate、 deallocate 、fastmalloc 、 fastfree 等。

裡的一些函式使用起來很方便 , 有計算向批角度的函式 fastatan2 、計算立方根的函式 cuberoot、向上取整函式 cvce止 向下取整函式 cvfloor、四捨五入函式 cvround 等 。還有一些類似 matlab 裡面的函式,比如 cvlslnf 判斷自變品是否無窮大, cvlsnan 判斷自變數是否不是乙個數 。

顯示文字相關的函式有 gettextsize 、 cvlnitfont 、 puttext 。

作圖相關的函式有 circle 、 clipline 、 ellipse 、 ellipse2poly 、 line 、 rectangle、polylines、類 line iterator 。

填充相關的函式有 fillconvexpoly 、 fillpoly 。

opencv 中 rng()函式的作用為初始化隨機數狀態的生成器 。

OpenCV學習再談OpenCV資料結構Mat

我記得開始接觸opencv就是因為乙個演算法裡面需要2維動態陣列,那時候看core這部分也算是走馬觀花吧,隨著使用的增多,對mat這個結構越來越喜愛,也覺得有必要溫故而知新,於是這次再看看mat。mat最大的優勢跟stl很相似,都是對記憶體進行動態的管理,不需要之前使用者手動的管理記憶體,對於一些大...

OpenCV基礎資料結構

opencv基礎資料結構圖譜 影象資料結構 ipl 影象 iplimage int nchannels 色彩通道數 1,2,3,4 int depth 象素色深 ipl depth 8u,ipl depth 8s,ipl depth 16u,ipl depth 16s,ipl depth 32s,i...

opencv基礎資料結構

point 類不用多言,裡面兩個成員變數x,y。point 就是point2i,也是point,point 就是point2f,point 就是point2d。point3 類不太常用,跟point 類差不太多,成員變數x,y,z。size 類成員變數width height。size 就是size...