2011-11-24 58 views
0

可能重複:
OpenCV rgb value for cv::Point in cv::Mat如何使用獲得的R,G,B值opencv2.3

如你所知,在MATLAB很容易得到R/G/B值使用r = image(:,:,1)

但在OpenCV中(前2.2),我們必須用指針這樣的:

plImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3); ((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]=111; // B ((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]=112; // G ((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]=113; // R

但作爲openCV2.3出來,很容易得到這樣一個通道圖像的像素值:

Mat image; 
int pixel = image.at<uchar>(row,col); 

所以我只是想知道它還有一個簡單的方法來得到多通道圖像的r,g,b像素值就像在Matlab中一樣嗎?任何幫助將不勝感激=)

+0

這是我回答這個同一個問題一陣子回來:http://stackoverflow.com/questions/7899108/opencv-get-pixel- information-from-mat-image/7903042#7903042 – mevatron

回答

4

對於C++接口,你可以這樣做:

Vec3f pixel = image.at<Vec3f>(row, col); 

int b = pixel[0]; 
int g = pixel[1]; 
int r = pixel[2]; 
2

爲瓦西里說,得到一個小區作爲VEC3將讓你可以輕鬆訪問其RGB分量像素,這是opencv中最簡單的解決方案,因爲數據結構將像素保存爲以下格式「RGBRGBRGBRGBRGB ...」,而matlab將其保存爲「RRRRRRRGGGGGGGBBBBBBBB ...」 以獲得像matlab中的指定通道,您可以使用CvSplit(或cv::split在C++風格),這個功能將圖像分成3-4個不同的通道,所以你可以訪問像matlab中的通道。在提供的鏈接,你可以找到一個相反的功能的參考 - 合併

+0

+1提及合併/拆分 – Sam

相關問題