opencv基礎資料結構

2021-07-10 09:06:03 字數 1603 閱讀 3908

**

point_類不用多言,裡面兩個成員變數x,y。point_就是point2i,也是point,point_就是point2f,point_就是point2d。

point3_類不太常用,跟point_類差不太多,成員變數x,y,z。

size_類成員變數width、height。size_就是size2i,也是size,size_就是size2f,大家就要不臆斷出來個size2d啥的讓編譯器發懵了。

rect_類有些意思,成員變數x、y、width、height,分別為左上角點的座標和矩形的寬和高。常用的成員函式有size()返回值為乙個size,area()返回矩形的面積,contains(point)用來判斷點是否在矩形內,inside(rect)函式判斷矩形是否在該矩形內,tl()返回左上角點座標,br()返回右下角點座標。值得注意的是,如果想求兩個矩形的交集,並集,可以用如下格式

[cpp]view plain

copy

rect rect = rect1 & rect2;  

rect rect = rect1 | rect2;  

如果想讓矩形平移操作,縮放操作

,甚至可以這樣寫

[cpp]view plain

copy

rect rectshift = rect + point;  

rect rectscale = rect + size;  

是不是很妙,可以大大減輕你的**量。

matx其實是個輕量級的mat,必須在使用前規定好大小,比如乙個2*3的float型的可以宣告為matx23f。我想很容易理解的。

vec是matx的乙個派生類,就是乙個1維的matx,跟vector很相似。比如想宣告乙個10個資料的float陣列,可以寫成vec2f。

這樣就很容易引出乙個大家經常使用的資料結構了,scalar_類,這個類其實就是乙個vec4x的乙個變種,大家常用的scalar其實就是scalar_。這樣一說,大家是不是就很容易理解了,為啥很多函式的引數輸入可以是mat,也可以是scalar了。其實opencv定義的inputmat,outputmat引數格式,以上的這幾種資料結構都可以作為引數的。

接下來介紹乙個有意思的類range,大家可能用的不多,對它不熟悉,其實它就是為了使opencv的使用更像matlab而產生的。比如range::all()其實就是matlab裡的符號:或者...。而range(a, b)其實就是matlab中的a:b。有趣吧,注意a,b都需要是int型的哦,親。

ptr類我就不太敢介紹了,是智慧型指標,我也沒有用過,文件裡說是很類似大名鼎鼎的boost庫里的shared_ptr。希望以後有機會用一下再拿出來分享心得。

最後出場的還是最重量級的mat,介紹幾個比較重要的成員變數flag(就是我之前說過的header裡的結構資訊,深度資訊,通道數),dims是mat的維數,要求大於等於2,rows和cols引數代表2維矩陣的行數列數(對於更高維的矩陣,這兩個引數都是-1),還有個比較常用的引數應該uchar* data,是mat的資料指標(比較暴力的同學可以直接呼叫它好了,不推薦),還有個引數refconst,我理解應該就是我上一講提到的釋放記憶體的時候要判斷這個矩陣是否是最後乙個被使用的,這個引數應該就是控制跟當前矩陣結構相關的個數的。

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之基礎資料結構

被乙個同學拉去面試乙個團隊,抱著試試看的心態去,竟然以後打算往人工智慧或者遊戲開發上面靠,計算機圖形學是必須要學的了。於是面試他們的影象處理組,最後陰差陽錯的進了。竟然進了就好好對待吧。opencv擼起來。這兩天看了一些部落格,還有借了 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,ipl depth 32f,ip...