影象的長寬以及灰度、RGB影象的畫素原理分佈
今天在看矩形旋轉的時候忽然腦子短路,把一些概念全弄混了,現總結一下,以便下次再混的時候可以參考確認下,自己的理解,有錯的地方還請指正。
首先,在Opencv2中基本上都是用的Mat來表示影象了,C++的函式呼叫中基本上也都是Mat圖,從根本上說,一張影象是一個由數值組成的矩陣,矩陣的每一個元素代表一個畫素。對於灰度影象而言,畫素有8位無符號數表示,其中0代表黑色,255代表白色。那麼矩陣和影象間到底是一個什麼樣的關係呢。
第一:Mat圖有行和列,即cv::Mat中有公有成員變數cols和rows,注意,這裡的cols就是影象的寬度width,rows就是影象的高度height。這個width和height我們可以在其它
這裡我引用《OpenCV學習筆記(四十一)——再看基礎資料結構core》中關於Rect的介紹,Rect_類有些意思,成員變數x、y、width、height,分別為左上角點的座標和矩形的寬和高。常用的成員函式有Size()返回值為一個Size,area()
第二:Mat圖中的影象畫素位置表示和矩陣中元素的表示。這裡引用《訪問Mat影象中每個畫素的值》中幾張圖來表示Mat矩陣中存資料的關係。單通道灰度圖資料存放格式:
多通道的影象中,每列並列存放通道數量的子列,如RGB三通道彩色圖:
這時,大家得注意了,二維矩陣的行和列用來表示一個元素,並且一般是從0標號開始,所以實際上是有m+1列,也就是說寬度width是m+1的,行類似。還有就是Mat.at(int y, int x)來訪問一個畫素,這時候的y表示的行號,x表示的列號,相對應的就是x表示水平的寬,y表示的豎直的高,只不過x和y都是從0開始的標號。容易搞混的地方就在於一些矩陣的相減了,相減完後怎麼表示畫素位置,這個時候一般比較難把握,但是隻要明白矩陣裡x,y,width,height的關係,搞清楚就容易多了。