一幅尺寸為m*n的影象可以用乙個m*n矩陣來表示,矩陣元素的值表示
這個位置上的畫素的亮度,一般來說畫素越大表示該點越亮。
一般來說,灰度圖用2維矩陣表示,彩色(多通道)影象用3維矩陣(
m*n*3)表示。對於影象顯示來說,目前大部分裝置都是用無符號8位整數
(型別為cv_8u)表示畫素亮度。
影象資料在計算機記憶體中的儲存順序為以影象左上點開始。
如果是多通道影象,比如rgb影象,則每個畫素用三個位元組表示。在
opencv中,rgb影象的通道順序為bgr。
3.2 mat類
早期的opencv中,使用lpllmage和cvmat資料結構來表示影象。lpllmage
和cvmat都是c語言的結構。需要自己管理記憶體。
新版本的opencv中引入了mat類。mat類能夠自動管理記憶體。
mat m(3,2, cv_8uc3, scalar(0,0,255));
count << "m = " << end1 << " " << m << end1;
第一行**建立乙個行數(高度)為3,列數為2的影象,影象元素是8為
無符號整數型別,且有三個通道。影象的所有畫素值被初始化為
(0,0,255)。由於opencv中預設的顏色順序為bgr,因此這是乙個全紅色的
影象。第二行**是輸出mat類的例項m的所有畫素值。mat重定義了《操作符,
使用這個操作符,可以方便地輸出所有畫素值,而不需要使用for迴圈逐
個畫素輸出。
m =[0,0,255,0,0,255;
0,0,255,0,0,255;
0,0,255,0,0,255;]
3.3.2 create()函式建立物件
除了在建構函式中可以建立影象,也可以使用mat類的create()函式建立
影象。如果create()函式指定的引數與影象之前的引數相同,則不進行實
質的記憶體申請操作;如果引數不同,則減少原始資料記憶體的索引,並重新
申請記憶體。使用方法如下面所示:
mat m(2,2, cv_8uc3): //建構函式建立影象
m.create(3,2, cv_8uc2)//釋放記憶體重新建立影象
需要注意的是,使用create()函式無法設定影象畫素的初始值。
3.3.3 matlab風格的建立物件方法
zeros(), ones()和eyes()。使用這些函式需要指定影象的大小和型別
mat z = mat::zeros(2,3, cv_8uc1);
cout << "z = " << end1 << " " << z << end1;
opencv中使用vec類預定義了一些小向量,可以將之用於矩陣元素的表達
。typedef vecvec2b;
typedef vecvec3b;
typedef vecvec4b;
例如8u型別的rgb彩色影象可以使用vec3b,3通道float型別的矩陣可以使
用vec3f。
對於vec物件,可以使用符號如運算元般讀寫其元素,如:
vec3b color; //用color 變數描述一種rgb顏色
color[0] = 255; //b分量
color[1] = 0; //g分量
color[2] = 0; //r分量
3.5.1 at()函式
函式at()來實現讀矩陣中的某個畫素,或者對某個畫素進行賦值操作。
uchar value = grayim.at(i,j);//讀出i行第j列畫素值
grayim.at(i,j)=128; //將第i行第j列畫素值設定為128
Python基礎 opencv入門1
opencv是乙個開源計算機視覺庫,安裝非常簡單,win r啟動cmd後直接使用pip安裝,我用的是python3.6 pip install opencv python最近在忙於某個比賽專案中,需要用到影象識別,首先想到的就是使用python。python的特點我就不說了,主要是考慮到其的簡潔和龐...
第1章 OpenCV 入門
opencv 輕鬆入門 面向python 學習筆記 import cv2 img cv2.imread your path image.png cv2.imread unchanged cv2.namedwindow window name cv2.imshow window name img cv...
opencv入門 一 OpenCV入門
retval cv2.imread 檔名,顯示控制引數 使用示例 import cv2 img cv2.imread c users 92039 desktop xiangmu test.png 兩個反斜槓,第乙個反斜槓用於轉義字元 none cv2.imshow 視窗名,影象名 示例 cv2.de...