OPENCV-1 学习笔记
生活随笔
收集整理的這篇文章主要介紹了
OPENCV-1 学习笔记
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
灰度圖:2維矩陣
彩色圖:3維矩陣
ps:目前大部分設(shè)備都是用無符號 8 位整數(shù)(類型為 CV_8U)表示像素亮度
Mat類定義:
class CV_EXPORTS Mat { public://一系列函數(shù).../* flag 參數(shù)中包含許多關(guān)于矩陣的信息,如:-Mat 的標(biāo)識(shí)-數(shù)據(jù)是否連續(xù)-深度-通道數(shù)目*/int flags;//矩陣的維數(shù),取值應(yīng)該大于或等于 2int dims;//矩陣的行數(shù)和列數(shù),如果矩陣超過 2 維,這兩個(gè)變量的值都為-1int rows, cols;//指向數(shù)據(jù)的指針uchar* data;//指向引用計(jì)數(shù)的指針//如果數(shù)據(jù)是由用戶分配的,則為 NULLint* refcount;//其他成員變量和成員函數(shù)... };單通道圖像:元素類型一般為 8U(即 8 位無符號整數(shù)),也可以是 16S、32F 等;這些類型可以直接用 uchar、short、float 等 C/C++語言中的基本數(shù)據(jù)類型表達(dá)
多通道圖像:如RGB彩色圖像,需要用三個(gè)通道來表示。在這種情況
下,如果依然將圖像視作一個(gè)二維矩陣,那么矩陣的元素不再是基本的數(shù)據(jù)類型。可以采用Vec類,表示一個(gè)向量。如8U類型的RGB彩色圖像使用Vec3b。
對于 Vec 對象,可以使用[]符號如操作數(shù)組般讀寫其元素,如:
Vec3b color; //用 color 變量描述一種 RGB 顏色 color[0]=255; //B 分量 color[1]=0; //G 分量 color[2]=0; //R 分量at()函數(shù):實(shí)現(xiàn)讀取矩陣中的某個(gè)像素,或者對某個(gè)像素進(jìn)行賦值操作。
uchar value = grayim.at<uchar>(i,j);//讀出第 i 行第 j 列像素值 grayim.at<uchar>(i,j)=128; //將第 i 行第 j 列像素值設(shè)置為 128對圖像進(jìn)行遍歷,分別對單通道的 grayim 以及 3 個(gè)通道的 colorim,然后對兩個(gè)圖像的所有像素值
進(jìn)行賦值,最后現(xiàn)實(shí)結(jié)果
使用迭代器遍歷:
Mat grayim(600, 800, CV_8UC1);Mat colorim(600, 800, CV_8UC3);//遍歷所有像素,并設(shè)置像素值MatIterator_<uchar> grayit, grayend;for( grayit = grayim.begin<uchar>(), grayend = grayim.end<uchar>(); grayit != grayend; ++grayit)*grayit = rand()%255;//遍歷所有像素,并設(shè)置像素值MatIterator_<Vec3b> colorit, colorend;for( colorit = colorim.begin<Vec3b>(), colorend = colorim.end<Vec3b>(); colorit != colorend; ++colorit){(*colorit)[0] = rand()%255; //Blue(*colorit)[1] = rand()%255; //Green(*colorit)[2] = rand()%255; //Red}//顯示結(jié)果采用指針:
Mat grayim(600, 800, CV_8UC1);Mat colorim(600, 800, CV_8UC3);//遍歷所有像素,并設(shè)置像素值for( int i = 0; i < grayim.rows; ++i){//獲取第 i 行首像素指針uchar * p = grayim.ptr<uchar>(i);//對第 i 行的每個(gè)像素(byte)操作for( int j = 0; j < grayim.cols; ++j )p[j] = (i+j)%255;}//遍歷所有像素,并設(shè)置像素值for( int i = 0; i < colorim.rows; ++i){//獲取第 i 行首像素指針Vec3b * p = colorim.ptr<Vec3b>(i);for( int j = 0; j < colorim.cols; ++j ){p[j][0] = i%255; //Bluep[j][1] = j%255; //Greenp[j][2] = 0; //Red}}//顯示結(jié)果總結(jié)
以上是生活随笔為你收集整理的OPENCV-1 学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取弹出的窗口_Win7系统如何获取设置
- 下一篇: OPENCV-2 学习笔记