來自:
本質上說一張影象就是由數值組成的矩陣。opencv 2.x由 cv::mat 這個資料結構來表示一張影象。矩陣的每乙個元素代表了乙個畫素。對於彩色影象而言矩陣的元素是乙個三元數。對影象有了這個新的認識,下面可以試著借助opencv處理影象了。
先來看一下今天要處理的影象:
今天的主題是訪問畫素,首先來看一下如何訪問畫素值。其實對於畫素值的操作都可以由cv::mat類中成員直接或間接實現,cv::mat有若干成員函式可以獲取影象的資料及屬性。
操作單個畫素方法:
at(int y
,int x)
cv::mat的成員函式:at(int y
,int x)可以用來訪問影象中對應座標為(x,y)的元素座標。但是在使用它時要注意,在編譯期必須要已知影象的資料型別,這是因為cv::mat可以存放任意資料型別的元素。因此at方法的實現是用模板函式來實現的。
使用方法:假設提前已知一幅影象img的資料型別為 unsigned char型灰度圖(單通道),要對座標為(10,12)的畫素重新賦值為128,則對應操作如下:
img.at(12,10) = 128;
如果要操作的img是一幅資料型別同樣為unsigned char的彩色,再次要求將座標(10,12)的畫素賦值為128。這個操作跟上面的就有點區別了,需要對這個畫素三個通道的每個對應元素賦值,opencv中影象三原色在記憶體中的排列順序為b-g-r(見下面注釋),操作過程如下:
img.at(12,10) [0]= 128;//b
img.at< cv::vec3b >(12,10) [1]= 128;//g
img.at< cv::vec3b >(12,10) [2]= 128;//r
了解了at方法的用法,下面就嘗試一下使用at方法對剛才的做乙個簡單的處理(將影象中加入椒鹽噪點)。椒鹽噪點是一種特殊的噪點,是隨機的將影象的部分畫素設定為黑色或白色。
既然灰度圖與彩色影象對單個元素的操作方式不同,這就需要有乙個影象型別判斷的過程。
清楚了這些過程,下面就來看看新增椒鹽噪點函式的實現過程:
#include #includeusing namespace cv;
void salt(mat &img,int saltnum)
else if(img.channels() == 3)
}}int main()
程式執行後的效果圖:
原圖
加入椒鹽雜訊後效果
其實除了at方法操作畫素,還可以使用opencv提供的類cv::mat_來實現。cv::mat_是乙個模板子類。這個類定義了很多額外的方法,但是沒有提供公共的成員變數。如果已知了矩陣的型別,使用cv::mat_會帶來很多便利。它的使用方法如下:
img(10,12) = 128;//10行 12列
還有一種操作畫素的方法:使用mat類的ptr()方法配合cols 、rows、step、elemsize等成員變數,直接進行指標操作。下面先來說說這幾個成員變數
cols代表影象的列數
rows代表影象的高度
step代表以位元組為單位的影象寬度
elemsize代表畫素的大小 (比如乙個三通道uchar 型矩陣,返回值為3)
prt()方法同樣是個模板類,需要編譯期已知畫素點的型別:
uchar* addr = img.ptr(10);//返回10行的位址
addr +=12;//單通道灰度圖
*addr = 128;
同樣完成了對第10行第12列畫素的操作。若圖象為三通道彩色圖:
uchar* addr = img.ptr(10);//返回10行的位址
addr +=12* img.elemsize;//單通道灰度圖
*addr = 128;
addr +=12* img.elemsize是因為彩色圖象在記憶體中的儲存方式:影象緩衝區中的前三個位元組對應影象左上角第乙個畫素的三個通道值,接下來的三個位元組對應第一行的第二個畫素,以此類推。而且注意opencv預設是使用bgr的通道順序。
到此已經介紹了3中操作影象中畫素的方法。除這三種以外還有一種使用迭代器的操作。今天就不再介紹了。
Opencv2 4 9原始碼分析 SIFT
由於sift演算法在計算機視覺的特徵檢測和特徵描述中表現十分優異,因此該演算法一經提出,就引起了廣泛的關注。國內外對其研究的人很多,相關的資料也很多。在csdn中,有幾位作者的文章對sift演算法介紹得很詳細,如網名為 zddhub rachel zhang和xiaowei cqu。由王永明和王貴錦...
OpenCV2 4 9與VS2010配置遇到的問題
軟體 opencv 2.4.9 vs2010 從以下圖中我們可以看到opencv和 vs需要版本匹配,當安裝後的opencv檢視當前版本opencv2.4.9可以和vs2010 vs2011以及 vs2012匹配。1 在配置專案工程時,附加依賴項怎麼刪除和重新新增 移除 要想刪除依賴附加項主要是能夠...
Opencv2 4 9各標頭檔案功能說明
opencv open source computer vision library 乙個遵循bsd協議的計算機視覺技術開源庫,包含了幾百個計算機視覺演算法。目前最新版本應該是opencv3.0,alpha版和beta版都有了,我目前是用的2.4.9,3.0版本貌似有不少3d還有gpu相關的更新,很...