亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

OpenCV學習筆記(05):Mat類詳解(二)

2019-11-10 17:09:55
字體:
來源:轉載
供稿:網友

1. 前言:Mat類的深入解讀

我在學《數據結構》的時候,每接觸一種新的ADT(abstract data type, 抽象數據類型 ),一般的套路都是這樣的—— 1.先了解ADT的結構,如何定義?包括哪些數據對象?如,線性表是n個具有相同特性的數據元素的有限序列。 2.再學習基于該ADT結構的一些操作和算法。如,線性表的增刪查改,基于順序表的排序算法; 3.最后再學習該ADT的存儲方式和實現過程。如,鏈表在計算機內存中的存儲。

那么,在了解了基本結構之后,作為OpenCV最重要的ADT——Mat類,在計算中如何存儲,以及有哪些基本操作的呢?

2.元素數據尋址

Mat類是一個n維單通道或多通道的稠密型數值陣列,可以用于存儲實數或者負數向量和矩陣(real or complex-valued vectors or matrices)、灰度圖和彩色圖(grayscale or color images )、矢量場(vector fields)等,陣列M的數據分布取決于數組M.step[],因此M陣列中元素(i0,...,iM.dims?1)的地址可以計算為:

addr(Mi0,...,iM.dims?1)=M.data+M.step[0]?i0+M.step[1]?i1+...+M.step[M.dims?1]?iM.dims?1

其中, step[i]是Mat類中十分重要的一個屬性,表示第i維的總大小,單位字節 M.data指向存儲這列的首地址(類似于數組名) M.dims是總維度

例如,二維矩陣的尋址可以表示為:

addr(Mi,j)=M.data+M.step[0]?i+M.step[1]?j

注意, M.step[i] >= M.step[i+1] ,實際上, M.step[i] >= M.step[i+1]* M.size[i+1],其中,M.size[i]表示第i維包含的個數,這也就意味著,二維矩陣是按行存儲(stored row-by-row),而三維矩陣是按面存儲(stored plane-by-plane),高維以此類推。M.size[M.dims-1]表示矩陣的最低維,大小與M.elemSize() 相等

舉個例子,來說明矩陣的存儲方式,以及矩陣各個屬性的意義——

int sizeMat[] = { 3, 4, 6 };Mat src(3, sizeMat, CV_32FC3, Scalar::all(0));cout << "src.dims = " << src.dims << endl;cout << "src.step[0] = " << src.step[0] << endl;cout << "src.step[1] = " << src.step[1] << endl;cout << "src.step[2] = " << src.step[2] << endl << endl;cout << "src.size[0] = " << src.size[0] << endl;cout << "src.size[1] = " << src.size[1] << endl;cout << "src.size[2] = " << src.size[2] << endl << endl;cout << "src.step1[0] = " << src.step1(0) << endl;cout << "src.step1[1] = " << src.step1(1) << endl;cout << "src.step1[2] = " << src.step1(2) << endl << endl;cout << "src.elemSize() = " << src.elemSize() << endl;cout << "src.elemSize1() = " << src.elemSize1() << endl;

創建一個3維的矩陣,尺寸為 3 * 4 * 6,那么輸出為

Mat類型維度是從高維度到低維度排列的,比如3維矩陣,按照面、行、點的順序對應其維度大小,我們上面所定義的矩陣包含3個面、每個面包含4行,每行包含6個點。

因此,step[0]表示第一維,面( plane),所包含總元素的字節大小

我們定義的矩陣每個面有4*6=24個點,每個點定義為CV_32FC3類型,即3通道的32位float型,一個元素包含3個float,即 3 *4=12字節,那么整個面的大小就為 24 *12 =288 字節

同理,step[1]表示第二維,行( row) ,所包含總元素的大小

step[1] = 6 *12 =72 字節

step[2]表示第三維,點( point) ,所包含總元素大小

step[2] = 12字節

step1(i)表示第i維的包含的通道數 第一維,包含4 * 6個點, 每個點都是3通道的,因此,第一維包含4 * 6 * 3 =72個通道 同理,第二維包含 18個通道,第三維包含3個通道

屬性size表示每個維度的大小,即—— 第一維大小為3,size(0) = 3 第二維為4,size(1) = 4 第三維為6,size(2) = 6

屬性elemSize表示的是每一個矩陣元素的大小,這個元素可能包含多個通道,而elemSize1表示的是每個通道下所包含基本類型的大小,即elemSize=channels * elemSize1

最后再通過一張圖來表示Mat類的尋址方式

3.Mat類元素訪問方法

(1)Mat成員函數at<>()訪問元素

Mat的成員函數at()是一個模板函數,針對不同的情況,有多個重載函數可供選擇,在這里,我們使用最常見的二維矩陣的at函數

for (int r = 0; r < src.rows; r++) { for (int c = 0; c < src.cols; c++) { cout<< src.at<Vec3f>(r,c)<<endl; } }

注意,使用at函數時,應該知道矩陣元素的類型和通道數,根據矩陣元素類型和通道數來確定at函數傳遞的類型,在上例當中,我們定義的src矩陣是CV_32FC3,即3通道float型,對應Vec3f可以兼容該類型。

(2)使用Mat的成員函數ptr<>()訪問元素

Vec3f*temp(NULL);for (int r = 0; r < src.rows; r++) { temp = src.ptr<Vec3f>(r); for (int c = 0; c < src.cols; c++) { cout<< temp[c]; } }

注意,ptr 是指向矩陣的行,同樣,使用ptr函數也應該知道矩陣元素的類型和通道數

(3)使用OpenCV迭代器

MatIterator_<Vec3b> it_src; MatIterator_<Vec3b> itEnd_src;it_src = src.begin<Vec3f>(); itEnd_src = src.end<Vec3f>(); for (; it_src != itEnd_src; it_src++) { cout<< *it_src; }

4.參考文獻

[1] https://www.douban.com/note/265479171/

[2] http://blog.csdn.net/qianqing13579/article/details/45318279

[3] http://blog.csdn.net/bendanban/article/details/30527785


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲女人天堂视频| 国产日韩精品在线观看| 亚洲一区二区在线播放| 人人爽久久涩噜噜噜网站| 日韩精品免费在线视频| 欧美亚洲午夜视频在线观看| 亚洲欧洲成视频免费观看| 欧美日韩国产在线播放| 欧美激情视频给我| 亚洲精品国产综合久久| 久久久久久久久亚洲| 亚洲全黄一级网站| 国产精品一区二区久久精品| 高清日韩电视剧大全免费播放在线观看| 成人精品aaaa网站| 国产视频精品在线| 国产欧美欧洲在线观看| 精品国产一区久久久| 欧美性猛交xxxx久久久| 91理论片午午论夜理片久久| 亚洲精品综合精品自拍| 亚洲成人网在线观看| 国产精品第七影院| 欧美日韩一二三四五区| 91精品综合视频| 亚洲精品国产欧美| 国产欧美日韩专区发布| 亚洲精品大尺度| 亚洲国产一区二区三区四区| 欧美极品少妇与黑人| 大量国产精品视频| 97精品国产97久久久久久春色| 色悠悠久久88| 日韩欧美亚洲范冰冰与中字| 日韩电影在线观看中文字幕| 在线看国产精品| 高潮白浆女日韩av免费看| 亚洲最大av网站| 精品久久久久久亚洲国产300| 91av中文字幕| 美女性感视频久久久| 久热在线中文字幕色999舞| 国产亚洲a∨片在线观看| 欧洲亚洲妇女av| 国模精品一区二区三区色天香| 欧美国产精品日韩| 理论片在线不卡免费观看| 欧美日韩免费一区| 国产成人高清激情视频在线观看| 日本高清+成人网在线观看| 欧美高清第一页| 日韩免费电影在线观看| 成人免费视频97| 国产精品私拍pans大尺度在线| 成人xxxxx| 欧美国产日韩一区二区三区| 国产精品免费久久久久久| 永久免费看mv网站入口亚洲| 精品日本美女福利在线观看| 久久久中文字幕| 成人精品aaaa网站| 国产精品精品视频| 亚洲已满18点击进入在线看片| 国外成人在线直播| 91老司机精品视频| 国产精品毛片a∨一区二区三区|国| 大荫蒂欧美视频另类xxxx| 亚洲精品日韩av| 热草久综合在线| 91av在线网站| 18一19gay欧美视频网站| 精品自在线视频| 国产精品美女主播在线观看纯欲| 日韩性xxxx爱| 欧美日本亚洲视频| 国产精品精品久久久| 国产成人jvid在线播放| 国产999精品久久久影片官网| 亚洲一区二区三区毛片| 久久免费少妇高潮久久精品99| 亚洲乱亚洲乱妇无码| 亚洲一区二区三区乱码aⅴ| 亚洲aa在线观看| 亚洲国产欧美一区二区三区久久| 亚洲人成在线观看网站高清| 久久亚洲精品中文字幕冲田杏梨| 一色桃子一区二区| 久久99久久久久久久噜噜| 日韩欧美在线播放| 色婷婷综合久久久久| 最近2019免费中文字幕视频三| 欧美精品免费在线| 国产脚交av在线一区二区| 欧美xxxx做受欧美.88| 久久精品久久久久| 91在线色戒在线| 国产在线精品自拍| 中文在线资源观看视频网站免费不卡| 亚洲国产精品人人爽夜夜爽| 欧美专区在线观看| 亚洲欧美日韩精品| 亚洲色图欧美制服丝袜另类第一页| 亚洲精品98久久久久久中文字幕| 国产精品久久久久久av福利| 欧美午夜www高清视频| 精品亚洲一区二区三区在线观看| 国产精品一香蕉国产线看观看| 欧美第一页在线| 欧美与黑人午夜性猛交久久久| 欧美一级大片在线免费观看| 国产精品av电影| 国产欧美一区二区三区在线看| 久久久久久91香蕉国产| 疯狂做受xxxx高潮欧美日本| 久久天天躁狠狠躁老女人| 国产成人鲁鲁免费视频a| 精品美女久久久久久免费| 久久影院免费观看| 国产精品高潮呻吟久久av黑人| 777777777亚洲妇女| 欧美肥臀大乳一区二区免费视频| 一区二区三区视频免费| 国产精品黄色影片导航在线观看| 久久99青青精品免费观看| 欧美日韩国产成人高清视频| 亚洲区免费影片| 欧美在线观看网站| 国产精品人人做人人爽| 中文字幕日韩在线播放| 精品视频在线播放免| 亚洲精品成人久久电影| 91麻豆桃色免费看| 欧美精品日韩www.p站| 日韩成人小视频| 亚洲国产成人精品久久| 欧美亚洲视频在线观看| 91国内免费在线视频| 欧美黑人又粗大| 91丝袜美腿美女视频网站| 日本最新高清不卡中文字幕| 91免费视频国产| 日本国产一区二区三区| 亚洲欧美国产精品久久久久久久| 国产精品久久久久久久久久久久久| 亚洲天堂男人天堂| 久久久久久久国产精品| 尤物九九久久国产精品的分类| 91精品啪在线观看麻豆免费| 欧美国产第二页| 国产一区视频在线播放| 亚洲影院在线看| 亚洲欧美中文日韩在线| 日韩有码在线视频| 精品国产户外野外| 国产91热爆ts人妖在线| 亚洲视频一区二区三区| 91精品国产综合久久香蕉922| 久久99精品久久久久久琪琪| 欧美国产激情18| 性亚洲最疯狂xxxx高清| 亚洲成人黄色在线| 久久久久久综合网天天| 日韩精品黄色网| 在线看福利67194|