如何使用opencv2.3获取r,g,b值[重复]

Posted

技术标签:

【中文标题】如何使用opencv2.3获取r,g,b值[重复]【英文标题】:how to get r,g,b value using opencv2.3 [duplicate] 【发布时间】:2011-11-24 14:28:45 【问题描述】:

可能重复:OpenCV rgb value for cv::Point in cv::Mat

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

但是在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);

所以我只是想知道还有一种简单的方法可以像在 Matlab 中那样获取多通道图像的 r,g,b 像素值吗?任何帮助将不胜感激 =)

【问题讨论】:

这是我不久前对同一问题的回答:***.com/questions/7899108/… 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

正如 vasile 所说,将单元格作为 Vec3 将为您提供易于访问其 rgb 组件的像素,这是 opencv 中最简单的解决方案,因为数据结构以以下格式保存像素“RGBRGBRGBRGBRGB ...”而matlab将其保存为“RRRRRRRGGGGGGGBBBBBBBB...” 要像在 matlab 中一样获得指定的通道,您可以使用 CvSplit(或 c++ 样式中的 cv::split),此函数会将图像拆分为 3-4 个不同的通道,以便您可以访问 matlab 中的通道。在提供的链接中,您还可以找到相反功能的参考 - 合并

【讨论】:

+1 用于提及合并/拆分

以上是关于如何使用opencv2.3获取r,g,b值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何计算图像的灰度值?delphi

如何将表格十六进制颜色代码#RRGGBB 转换为 R、G、B 值

如何找到图像中的所有像素都是灰度或每个像素的 R、G、B 值相等

OpenCV:如何计算最大值(R,G,B)

使用指向图像数据的指针访问 R、G 和 B 像素值

如何在飞镖列表中获取重复值的总和?