2011-11-24 60 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

相关问题