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

标签 opencv

由于每个像素内存包含蓝色、绿色和红色每个分量的 8 位。那么如何将这些组件从图像或图像矩阵中分离出来。作为
int Blue = 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 channel ,您可以使用以下命令

现在到 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/

相关文章:

python - 将 RGB 图像从 numpy 数组转换为 HSV (opencv)

opencv - 简单的 OpenCV 问题

opencv - DFT 和 FFT(幅度)结果之间的差异

c++ - 以 jpeg 格式发送 Iplimage 数据

opencv 2 - 如何只计算两个图像之间的平移和比例?

c++ - OpenCV 2.4.7.2 + windows 8.1 + Visual Studio 2013 == 错误

opencv - 文本文档中的 block 方案检测

opencv - 如何在 OCR 中查找图像中的数字?

c++ - OPENCV3 detectAndCompute 中的调试断言失败

java - OpenCV(JavaCV)与 OpenCV(C/C++ 接口(interface))