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

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

OpenCV學習筆記(04):Mat類詳解(一)

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

1. 前言:Mat類起源

OpenCV作為強大的計算機視覺開源庫,很大程度上參考了MatLab的實現細節和風格,比如說,在OpenCV2.x 版本以后,越來越多的函數實現了MatLab具有的功能,甚至干脆連函數名都一模一樣(如 imread, imshow,imwriter等)。這一做法,不僅拉近了產品開發與學術研究的距離,并極大程度的提高了開發人員的研發效率,不得不說,Intel公司真的是一個偉大的公司。

在計算機內存中,數字圖像以矩陣的形式存儲和運算,比如,在MatLab中,圖像讀取之后對應一個矩陣,在OpenCV中,同樣也是如此。

在早期的OpenCV1.x版本中,圖像的處理是通過iplImage(該名稱源于Intel的另一個開源庫Intel Image PRocessing Library ,縮寫成IplImage)結構來實現的。早期的OpenCV是用C語言編寫,因此提供的借口也是C語言接口,其源代碼完全是C的編程風格。IplImage結構是OpenCV矩陣運算的基本數據結構。

到OpenCV2.x版本,OpenCV開源庫引入了面向對象編程思想,大量源代碼用C++重寫,Mat類 (Matrix的縮寫) 是OpenCV用于處理圖像而引入的一個封裝類。從功能上講,Mat類在IplImage結構的基礎上進一步增強,并且,由于引入C++高級編程特性,Mat類的擴展性大大提高,Mat類的內容在后期的版本中不斷豐富,如果你查看Mat類的定義的話(OpenCV3.1/sources/modules/core/include/opencv2/core/mat.hpp),會發現其設計實現十分全面而具體,基本覆蓋計算機視覺對于圖像處理的基本要求。

這里寫圖片描述

因此,在當前的OpenCV開發中,Mat可以說是最最最常見的數據單元,深入了解Mat類對于OpenCV深入開發有著重大意義。

2. Mat類常用成員函數和成員變量

Mat類十分龐大,其所涉及的成員函數和變量難以一一細數,在這里,僅學習記錄其最最最常見的部分,以便日常使用。

2.1 構造函數

0.默認構造函數

cv::Mat::Mat()

默認構造函數,生成一個矩陣并由OpenCV提供的函數(一般是Mat::create() 和 cv::imread() )來分配儲存空間。

Mat類可以分為兩個部分:矩陣頭指向像素數據的矩陣指針

矩陣頭 包括數字圖像的矩陣尺寸、存儲方法、存儲地址和引用次數等,矩陣頭的大小是一個常數,不會隨著圖像的大小而改變,但是保存圖像像素數據的矩陣則會隨著圖像的大小而改變,通常數據量會很大,比矩陣頭大幾個數量級。這樣,在圖像復制和傳遞過程中,主要的開銷是由存放圖像像素的矩陣而引起的。因此,OpenCV使用了引用次數,當進行圖像復制和傳遞時,不再復制整個Mat數據,而只是復制矩陣頭和指向像素矩陣的指針,例如:

cv::Mat a ; //默認構造函數,創建矩陣頭a = cv::imread("test.jpg");//讀入圖像,矩陣指針指向該像素數據cv::Mat b = a ;//復制 

上面的a,b有各自的矩陣頭,但是其矩陣指針指向同一個矩陣,也就是其中任何一個改變了矩陣數據都會影響另外一個。 那么,多個Mat共用一個矩陣數據,最后誰來釋放矩陣數據呢? 這就是引用計數的作用,當Mat對象每被復制一次時,就會將引用計數加1,而每銷毀一個Mat對象(共用同一個矩陣數據)時引用計數會被減1,當引用計數為0時,矩陣數據會被清理。

1.常用構造函數(1)

cv::Mat::Mat(int rows,int cols,int type)

重載的構造函數,這也是常用構造函數之一,在創建對象同時,提供矩陣的大?。╮ows,行數;cols ,列數),以及存儲類型(type) 該類型表示矩陣中每一個元素在計算機內存的存儲類型,如CV_8UC3,具體含義為“3通道8位無符號數”。

使用舉例:

Mat src(10,10,CV_32FC3);

表示src是一個10*10的矩陣,且矩陣元素以32位float型存儲

類似,OpenCV還提供了一種Size() 數據結構來構造Mat對象

2.常用構造函數(2)

cv::Mat::Mat(Size size,int type )

Size類等效于一個成對數據,size::Size(cols,rows),特別注意 cols和rows的位置

舉個例子

Mat src1(3, 4, CV_32FC3);Mat src2(Size(3, 4), CV_32FC3);cout << "src1.rows=" << src1.rows << " src1.cols=" << src1.cols <<endl;cout << "src2.rows=" << src2.rows << " src2.cols=" << src2.cols << endl;cout << "src1.size="<<src1.size() << endl <<"src2.size=" << src2.size() <<endl;

輸出結果

不得不說,這個Size類的數據結構有點“反人類”,但這樣做的好處是方便了計算機內部的運算(比如OpenCV很多函數計算Size相關的數據也是按這個順序來的,具體為什么這樣,我也不太清楚,個人理解為行業標準)。

還有,我們平時所說分辨率,也是Size的類型,比如屏幕分別率 1440*900,其中cols=1440,rows=900。

3.常用構造函數(3)

cv::Mat::Mat(int ndims,const int * sizes,int type,const Scalar& s)

該構造函數與使用了Scalar參數,作用是能夠通過Scalar數據類來初始化元素值,例如,我們要生成一張白色背景的圖片:

Mat src1(300, 400, CV_8UC3,Scalar(255,255,255));imshow("test", src1);

運行結果

其中,(255,255,255)對應以8位無符號數存儲,RGB色域的白色值。

4.常用構造函數(4)

cv::Mat::Mat(const Mat & m)

引用m矩陣,注意,這里是引用值

2.2 成員函數

1.at函數 at函數的功能是訪問矩陣元素,根據不同的使用場景,有多個重載函數可供選擇。 如,訪問一個二維的矩陣,可用at函數原型為:

_Tp& cv::Mat::at(int i0,int i1)

使用方法舉例:

Mat src = imread("test.jpg");int elem = src.at<int>(0,0);

訪問test.jpg圖像的(0 , 0)元素

2.channels函數

int cv::Mat::channels () const

返回圖像的通道數

3.clone函數

Mat cv::Mat::clone() const

矩陣復制

4.convertTo函數

void cv::Mat::convertTo(OutputArray m,int rtype,double alpha = 1,double beta = 0) const

轉換矩陣存儲類型,具體計算公式如下: m(x,y)=saturate_cast<rType>(α(?this)(x,y)+β) m是輸入矩陣,rtype是目標類型,alpha是放縮系數,beta是增減標量

5.copyTo函數

void cv::Mat::copyTo(OutputArray m) const

從m矩陣復制data數據單元,與clone函數的作用類似

6.create函數

void cv::Mat::create(int rows,int cols,int type)

分配矩陣的存儲單元,一般和默認構造函數配合使用

7**.depth函數**

int cv::Mat::depth() const

返回圖像深度,即矩陣元素的存儲方式

8.diag函數

Mat cv::Mat::diag(int d = 0) const

提取矩陣的對角元素

9.mul函數

MatExpr cv::Mat::mul(InputArray m,double scale = 1 ) const

矩陣的乘法

10.inv函數

MatExpr cv::Mat::inv(int method = DECOMP_LU) const

求逆矩陣

11.t函數

MatExpr cv::Mat::t() const

求轉置矩陣 12.total函數

size_t cv::Mat::total() const

返回矩陣的元素總個數,如30*40的圖像,存在1200個像素點

2.3 成員變量

int cv::Mat::cols; //返回矩陣的列數int cv::Mat::rows // 返回矩陣行數uchar* cv::Mat::data // 指向矩陣的數據單元的指針int cv::Mat::dims // 返回矩陣維度,該維度≥2MatSize cv::Mat::size // 返回矩陣大小

3. 后記

OpenCV博大精深,我不過剛剛接觸,要學的東西還有很多很多很多…,繼續努力!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品免高潮在线观看| 国产成人avxxxxx在线看| 亚洲欧美日韩精品久久奇米色影视| 久久免费高清视频| 97久久精品人人澡人人爽缅北| 中国日韩欧美久久久久久久久| 国产免费亚洲高清| 欧美精品video| 亚洲欧美激情精品一区二区| 亚洲第一中文字幕| 久久国产精品久久精品| 精品中文字幕视频| 国产亚洲激情视频在线| 伊人久久精品视频| 欧美精品一二区| 国产欧洲精品视频| 这里只有精品在线播放| 亚洲性av网站| 欧美在线性爱视频| 国产亚洲欧洲黄色| 国产精品视频yy9099| 亚洲精品欧美日韩| 午夜精品国产精品大乳美女| 国产成人啪精品视频免费网| 2019中文在线观看| 久久久久久69| 国产免费一区二区三区在线能观看| 久青草国产97香蕉在线视频| 亚洲国产精品高清久久久| 色先锋久久影院av| 激情懂色av一区av二区av| 一区二区欧美亚洲| 亚洲一区二区国产| 日韩美女写真福利在线观看| 欧美性猛交xxxx乱大交极品| 国产精品久久久| 91日韩在线视频| 亚洲成人黄色网址| 亚洲国语精品自产拍在线观看| 最近2019中文字幕第三页视频| 国产成人精品视频在线| 午夜精品久久久99热福利| 91精品免费久久久久久久久| 欧美主播福利视频| 亚洲美女又黄又爽在线观看| 久久久久久久久久久人体| 在线观看中文字幕亚洲| 亚洲欧美日韩图片| 欧美午夜女人视频在线| 亚洲日本aⅴ片在线观看香蕉| 欧美大荫蒂xxx| 欧美在线视频在线播放完整版免费观看| 欧美床上激情在线观看| 欧美日韩在线免费| 国产精品视频自在线| 精品国产一区二区三区久久狼5月| 国产欧美精品日韩精品| 日韩中文字幕av| 欧美成人午夜视频| 在线日韩第一页| 日韩av在线免费观看一区| 日韩福利在线播放| 欧美大片网站在线观看| 亚洲人成毛片在线播放| 九九久久国产精品| 国产精品网站入口| 久久久91精品| 亚洲精品女av网站| 国产精品香蕉在线观看| 国产日韩欧美一二三区| 2020国产精品视频| 欧美精品情趣视频| 2019精品视频| 国产精品色视频| 欧美巨猛xxxx猛交黑人97人| 亚洲国产精品yw在线观看| 精品久久久久久中文字幕大豆网| 日韩av电影免费观看高清| 欧美成人免费全部观看天天性色| 久久夜精品va视频免费观看| 中文字幕亚洲激情| 菠萝蜜影院一区二区免费| 国产九九精品视频| 国产午夜精品一区二区三区| www.欧美精品| 热re91久久精品国99热蜜臀| 国产精品欧美亚洲777777| 伊人亚洲福利一区二区三区| 久久久久久久久国产精品| 欧美性生交xxxxxdddd| 国产精品美女在线| 成人深夜直播免费观看| 国产美女精品视频| 亚洲第一视频在线观看| 日韩最新免费不卡| 欧美成人精品不卡视频在线观看| 国产色综合天天综合网| 国产日韩欧美在线视频观看| 欧美激情一区二区三区在线视频观看| 91av成人在线| 亚洲一区二区三区乱码aⅴ| 亚洲日本中文字幕免费在线不卡| 亚洲精品久久久久中文字幕欢迎你| 欧美专区中文字幕| 成人美女免费网站视频| 国产视频福利一区| 96国产粉嫩美女| 久久久久久久久久久av| 亚洲国产91色在线| 777国产偷窥盗摄精品视频| 欧美韩国理论所午夜片917电影| 亚洲精品动漫100p| www高清在线视频日韩欧美| 91美女福利视频高清| 国产精品久久久久高潮| 一道本无吗dⅴd在线播放一区| 欧美国产视频日韩| 日韩中文字幕第一页| 亚洲尤物视频网| 91高清在线免费观看| 91豆花精品一区| 国产精品久久99久久| 98精品国产自产在线观看| 久久理论片午夜琪琪电影网| 最近2019中文字幕mv免费看| 欧美专区在线播放| 欧美性色xo影院| 亚洲va国产va天堂va久久| 另类少妇人与禽zozz0性伦| 都市激情亚洲色图| 欧美午夜宅男影院在线观看| 成人做爽爽免费视频| 国产精品第8页| 亚洲自拍中文字幕| 久久精品国产久精国产一老狼| 久久免费观看视频| 色综合久久88色综合天天看泰| 国产欧美久久久久久| 三级精品视频久久久久| 亚洲激情视频网| 亚洲精品一区二三区不卡| 色久欧美在线视频观看| 日韩成人中文电影| 久久国产精品久久久| 97在线精品国自产拍中文| 黑人狂躁日本妞一区二区三区| 精品国产老师黑色丝袜高跟鞋| 综合av色偷偷网| 亚洲午夜精品久久久久久性色| 91久久精品一区| 亚洲女人初尝黑人巨大| 久久久999精品| 免费av在线一区| 国产69精品99久久久久久宅男| 亚洲第一二三四五区| 成人激情视频在线观看| 午夜精品蜜臀一区二区三区免费| 国产精品日韩在线播放| 欧美高跟鞋交xxxxxhd| 国产精品高精视频免费| 国产日韩换脸av一区在线观看| 亚洲精品一区在线观看香蕉| 成人免费看吃奶视频网站| 久久91亚洲人成电影网站|