如何使用openCV分离彩色图像中像素的BGR分量

时间:2012-04-04 08:45:19

标签: opencv

由于每个像素存储器包含8位,每个组件为蓝色,绿色和红色。那么如何将这些组件与Image或Image Matrix分开。如 int Blue = f(Image(X,y)); //(x,y)= Image像素的坐标 同样,红色和绿色。 那么应该是函数f和2D矩阵Image;

提前致谢

1 个答案:

答案 0 :(得分:1)

首先,您必须完成OpenCV的基础知识,并将注意力转向图像处理的其他部分。您要求的是非常基本的,假设您将使用OpenCV 2.1及更高版本,

cv::Mat img =  Read the image off the disk or do something to fill the image.

访问RGB值

img.at<cv::Vec3b>(x,y); 

但是会给出与BGR相反的值。所以一定要注意这一点。 基本上是访问的cv :: Vec3b类型。

img.at<cv::Vec3b>(x,y)[0];//B
img.at<cv::Vec3b>(x,y)[1];//G
img.at<cv::Vec3b>(x,y)[2];//R

Vec3f pixel = img.at<Vec3f>(x, y);

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

现在,要将图像分割为RGB通道,您可以使用以下

现在归结为OpenCV的原始C风格(支持C和C ++风格) 您可以使用cvSplit功能

IplImage* rgb = cvLoatImage("C://MyImage.bmp");

//now create three single channel images for the channel separation
IplImage* r = cvCreateImage( cvGetSize(rgb), rgb->depth,1 );
IplImage* g = cvCreateImage( cvGetSize(rgb), rgb->depth,1 );
IplImage* b = cvCreateImage( cvGetSize(rgb), rgb->depth,1 );

cvSplit(rgb,b,g,r,NULL);

OpenCV 2 CookBook是OpenCV上最好的书籍之一。将帮助你很多。