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

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

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

2019-11-10 18:41:12
字體:
來源:轉載
供稿:網友

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
国产男女猛烈无遮挡91| 国产精品尤物福利片在线观看| 91国内产香蕉| 国产精品久久久av| 亚洲精品日韩丝袜精品| 国产精品日日做人人爱| 91久久嫩草影院一区二区| 国产精品自拍偷拍| 精品国产区一区二区三区在线观看| 国产精品高潮在线| 日韩在线观看免费高清| 久久久在线视频| 国产精品丝袜久久久久久高清| 欧洲一区二区视频| 不卡在线观看电视剧完整版| 久久久噜噜噜久噜久久| 国产成人精品a视频一区www| 日韩成人激情在线| 韩国美女主播一区| 国产日韩视频在线观看| 影音先锋日韩有码| 日本精品视频在线播放| 欧美精品少妇videofree| 亚洲一区二区三区视频| 青草青草久热精品视频在线观看| 亚洲精品www久久久| 久久99热精品这里久久精品| 久久久精品网站| 日韩在线欧美在线| 欧美中文字幕在线| 国内精品小视频在线观看| 久久久国产精彩视频美女艺术照福利| 97精品视频在线播放| 亚洲美女在线视频| 亚洲午夜久久久影院| 色爱精品视频一区| 亚洲性av网站| 日韩免费高清在线观看| 国产九九精品视频| 成人妇女淫片aaaa视频| 国产精品视频成人| 伊人伊成久久人综合网站| 97超碰蝌蚪网人人做人人爽| 精品久久中文字幕| 欧美激情亚洲一区| 国产成人精品国内自产拍免费看| 国产成人a亚洲精品| 久久香蕉国产线看观看av| 韩曰欧美视频免费观看| 精品中文字幕久久久久久| 久久亚洲精品中文字幕冲田杏梨| 国产精品夜色7777狼人| 亚洲精品国产精品国自产在线| 992tv在线成人免费观看| 国产成人精品久久二区二区| 国产欧美 在线欧美| 97视频色精品| 亚洲国产精品成人精品| 欧美激情一区二区三级高清视频| 国产精品久久久久免费a∨大胸| 久久人人爽人人爽人人片av高清| 亚洲欧美国产视频| 在线精品视频视频中文字幕| 日韩av三级在线观看| 欧美日韩视频在线| 欧美日韩激情视频| 成人春色激情网| 亚洲无限乱码一二三四麻| 日韩在线播放视频| 亚洲美女激情视频| 国产精品九九久久久久久久| 97国产精品视频| 日本高清不卡在线| 69视频在线免费观看| 日韩欧美在线视频观看| 色婷婷av一区二区三区在线观看| 国产噜噜噜噜久久久久久久久| 欧美成人激情在线| 久久av资源网站| 亚洲成人国产精品| 亚洲欧洲美洲在线综合| 亚洲精品二三区| 欧美日韩中文在线| 亚洲国产高清福利视频| 国产色视频一区| 午夜精品在线视频| 欧美国产精品人人做人人爱| 中文字幕综合一区| 国产欧美精品在线播放| 国产精品第一视频| 青青在线视频一区二区三区| 俺去了亚洲欧美日韩| 日韩av电影中文字幕| 久久精品电影一区二区| 日韩av日韩在线观看| 91免费视频国产| 欧美专区福利在线| 亚洲精品www久久久久久广东| 激情懂色av一区av二区av| 国产成人精品视频在线| 日韩在线视频观看正片免费网站| 亚洲激情电影中文字幕| 7777kkkk成人观看| 亚洲第一在线视频| 92福利视频午夜1000合集在线观看| 亚洲欧美在线一区二区| 一区二区三区日韩在线| 欧美激情第1页| 日韩在线观看网站| 国语自产偷拍精品视频偷| 成人女保姆的销魂服务| 国产精品久久久久久五月尺| 国产精品视频网| 68精品国产免费久久久久久婷婷| 成人激情视频在线| 亚洲欧美日韩视频一区| 91在线观看免费高清| 国产香蕉精品视频一区二区三区| 97在线精品国自产拍中文| 欧美巨乳美女视频| 日韩三级成人av网| 亚洲欧美自拍一区| 亚洲97在线观看| 亚洲裸体xxxx| 91欧美日韩一区| 国产精品99久久久久久久久久久久| 成人有码视频在线播放| 欧美精品一区三区| 日韩电影中文字幕在线观看| 国产精品亚洲аv天堂网| 成人激情电影一区二区| 国产精品88a∨| 欧美电影在线观看高清| 国产精品91视频| 亚洲免费视频在线观看| 国产在线拍偷自揄拍精品| 国产精品成人va在线观看| 色噜噜狠狠色综合网图区| 欧美福利视频网站| 久久久女女女女999久久| 亚洲欧美日本另类| 国外成人在线播放| 日韩国产在线看| 亚洲国产成人一区| 亚洲欧美日韩在线高清直播| 欧美韩国理论所午夜片917电影| 在线播放日韩专区| 日韩av在线网| 日韩国产精品视频| 欧美激情综合色| 欧美国产日韩二区| 91美女片黄在线观看游戏| 91高清免费视频| 欧洲美女免费图片一区| 91在线免费视频| 亚洲精品福利在线观看| 欧美猛交ⅹxxx乱大交视频| 日本成人在线视频网址| 在线观看亚洲视频| 色婷婷综合成人av| 91中文在线观看| 成人激情视频在线| 欧美激情在线狂野欧美精品| 日韩精品中文字幕在线观看|