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

提前致谢

最佳答案

首先,您必须了解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的最佳书籍之一。会帮你很多。

关于opencv - 如何使用openCV分离彩色图像中像素的BGR分量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10007723/

10-17 02:24