如何使用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值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将表格十六进制颜色代码#RRGGBB 转换为 R、G、B 值