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

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

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

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

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
日韩在线观看免费av| 亚洲第一页自拍| 国产一区二区三区在线观看网站| 亚洲福利在线播放| 亚洲最大福利网站| 性色av一区二区三区| 午夜精品一区二区三区在线视| 91超碰caoporn97人人| 亚洲第一精品夜夜躁人人爽| 欧美天天综合色影久久精品| 91麻豆国产精品| 亚洲精品电影在线观看| 欧美高清视频在线观看| 日韩国产激情在线| 国产在线观看不卡| 国产精品扒开腿做爽爽爽的视频| 精品少妇一区二区30p| 日韩一级黄色av| 97在线视频免费看| 亚洲精品福利在线观看| 亚洲精品国产精品国自产在线| 欧美激情乱人伦一区| 欧美日韩国产一中文字不卡| 欧美亚洲一区在线| 欧美三级xxx| 久久久久久中文字幕| 青青草一区二区| 欧美成人精品xxx| 欧美一级bbbbb性bbbb喷潮片| 中文精品99久久国产香蕉| 久久成人18免费网站| 成人国产在线视频| 亚洲免费人成在线视频观看| 性欧美亚洲xxxx乳在线观看| 国产精品成人va在线观看| 欧美成年人在线观看| 久久色免费在线视频| 亚洲国产精品女人久久久| 97视频在线播放| 一区二区欧美日韩视频| 国产精品精品久久久| 欧美激情精品在线| 国产午夜精品视频免费不卡69堂| 欧美裸体xxxx极品少妇软件| 国产成人小视频在线观看| 国产精品久久久久久av福利软件| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美色视频日本高清在线观看| 久久精品小视频| 欧美国产日韩一区二区三区| 亚洲欧美制服另类日韩| 亚洲精品欧美极品| 亚洲精品国产综合区久久久久久久| 欧美电影《睫毛膏》| 亚洲国产精品女人久久久| 久久久精品国产一区二区| 亚洲片国产一区一级在线观看| 亚洲性av在线| 亚洲色图第一页| 九九精品在线视频| 2021久久精品国产99国产精品| 狠狠躁天天躁日日躁欧美| 欧美最猛性xxxxx亚洲精品| 国产成人精品国内自产拍免费看| 国产亚洲欧美日韩一区二区| 国产精品久久久久久久久粉嫩av| 久久伊人精品一区二区三区| 国产精品一区二区三区成人| 国产精品视频网站| 亚洲性69xxxbbb| 国产精品青青在线观看爽香蕉| 国产欧美精品va在线观看| 亚洲综合精品一区二区| 久久视频在线免费观看| 成人激情视频小说免费下载| 日韩av电影国产| 欧美性猛交xxxxx免费看| 亚洲已满18点击进入在线看片| 亚洲精品日韩丝袜精品| 日本精品一区二区三区在线播放视频| 久久精品成人欧美大片| 中文字幕欧美日韩精品| 久久精品电影一区二区| 久久久精品一区| 精品中文字幕在线2019| 久久精品国产96久久久香蕉| 国产精品丝袜一区二区三区| 久久久久亚洲精品国产| 91在线免费网站| 日韩欧美有码在线| 影音先锋欧美精品| 久久久久久com| 日韩av在线免播放器| 日韩欧美亚洲一二三区| 久久久久久久久久久免费| 精品久久久久久久久久| 成人黄色午夜影院| 欧美日韩在线另类| 亚洲精品小视频| 美女啪啪无遮挡免费久久网站| 色妞一区二区三区| 国产ts人妖一区二区三区| 97久久精品在线| 日韩中文字幕在线看| 精品少妇一区二区30p| 欧美中文字幕在线视频| 亚洲欧美国产高清va在线播| 黑人极品videos精品欧美裸| 成人xvideos免费视频| 亚洲欧洲av一区二区| 一区二区三区回区在观看免费视频| 精品亚洲国产视频| 在线看片第一页欧美| 91久久精品美女高潮| 亚洲精品视频在线播放| 亚洲精品一区二区三区婷婷月| 国产精品日韩在线观看| 国产精品免费一区二区三区都可以| 国产有码在线一区二区视频| 国产一区二区三区久久精品| 成人女保姆的销魂服务| 久久成人精品视频| 黑人巨大精品欧美一区二区免费| 亚洲欧美制服另类日韩| 亚洲综合中文字幕68页| 国产精品96久久久久久又黄又硬| 国产精品免费一区豆花| 亚洲精品一区久久久久久| 在线日韩第一页| 国产欧美亚洲视频| 中文字幕欧美视频在线| 久久久亚洲影院你懂的| 国产国产精品人在线视| 成人日韩在线电影| 久久视频在线观看免费| 亚洲色图校园春色| 亚洲天堂精品在线| 欧美亚洲视频在线看网址| 5566成人精品视频免费| 欧美成人黄色小视频| 中文字幕亚洲国产| 亚洲国产中文字幕在线观看| 亚洲人精品午夜在线观看| 日韩中文字幕在线视频| 久久久人成影片一区二区三区| 欧美猛男性生活免费| 国产又爽又黄的激情精品视频| 成人av在线亚洲| 日韩精品免费视频| 一区二区三区四区精品| 国产精品久久久久久久久久新婚| 亚洲欧美日本精品| 97精品国产91久久久久久| 国产精品女视频| 亚洲图片欧洲图片av| 日韩欧美在线看| 午夜精品在线视频| 国产一区欧美二区三区| 国产精品福利观看| 亚洲色图18p| 国产日韩中文字幕在线| 国产精品一区二区久久精品| 亚洲色图欧美制服丝袜另类第一页| 亚洲国产第一页|