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



由于每个像素内存包含8位,用于蓝色、绿色和红色的每个组件。那么我如何将这些组件从图像或图像矩阵中分离出来。像int Blue=f(图像(X,y));//(x,y)=图像像素的坐标类似地,对于红色和绿色。那么函数f和二维矩阵图像应该是什么呢;

提前感谢

首先,您必须学习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上最好的书之一。对你有很大帮助。

最新更新