Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用opencv2.3获取r、g、b值_Opencv_Computer Vision - Fatal编程技术网

如何使用opencv2.3获取r、g、b值

如何使用opencv2.3获取r、g、b值,opencv,computer-vision,Opencv,Computer Vision,可能重复: 如您所知,在matlab中,使用r=image(:,:,1)很容易获得r/g/b值 但在openCV(2.2之前)中,我们必须使用如下指针: Mat image; int pixel = image.at<uchar>(row,col); plImage*img=cvCreateImage(cvSize(640480),IPL_DEPTH_32F,3); ((浮点*)(img->imageData+i*img->widthStep))[j*img->nChannels

可能重复:

如您所知,在matlab中,使用
r=image(:,:,1)
很容易获得r/g/b值

但在openCV(2.2之前)中,我们必须使用如下指针:

Mat image;
int pixel = image.at<uchar>(row,col);
plImage*img=cvCreateImage(cvSize(640480),IPL_DEPTH_32F,3);
((浮点*)(img->imageData+i*img->widthStep))[j*img->nChannels+0]=111;//B
((浮点*)(img->imageData+i*img->widthStep))[j*img->nChannels+1]=112;//G
((浮点*)(img->imageData+i*img->widthStep))[j*img->nChannels+2]=113;//R

但随着openCV2.3的问世,很容易获得单通道图像的像素值,如下所示:

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

所以我想知道还有没有一种简单的方法可以得到多通道图像的r,g,b像素值,就像在Matlab中一样?任何帮助都将被理解=)

< P> C++界面可以做到:

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

int b = pixel[0];
int g = pixel[1];
int r = pixel[2];
Vec3f pixel=image.at(行,列);
int b=像素[0];
int g=像素[1];
int r=像素[2];

对于C++接口,你可以这样做:

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

int b = pixel[0];
int g = pixel[1];
int r = pixel[2];
Vec3f pixel=image.at(行,列);
int b=像素[0];
int g=像素[1];
int r=像素[2];

正如瓦西里所说,将一个单元格作为Vec3将使您能够轻松访问其rgb组件的像素,这是opencv中最简单的解决方案,因为数据结构将像素保存为以下格式“rgbrgbrggbrgb…”,而matlab将其保存为“rrrrrrr ggggggg bbbbbbbbbbbb…”
若要在MATLAB中获得指定的通道,可以使用(或C++风格),该函数将图像拆分为3-4个不同的通道,这样您就可以访问像MATLAB一样的通道。在提供的链接中,您还可以找到相反函数的参考-merge

,正如vasile所说,将单元格作为Vec3将使您轻松访问其rgb组件的像素,这是opencv中最简单的解决方案,因为数据结构将像素保存为以下格式“RGBRGBRGBRGBRGB…”,而matlab将其保存为“rrrrrrr ggggggbbbbbbbb…”
若要在MATLAB中获得指定的通道,可以使用(或C++风格),此函数将图像分割为3-4个不同的通道,以便您可以访问matlab中的通道。在提供的链接中,您还可以找到相反函数的参考-merge

+1表示合并/拆分+1表示合并/拆分这是我不久前对同一问题的回答:这是我对这个问题的回答前一段时间的ame问题: