【问题标题】:how to separate BGR components of a pixel in color image using openCV如何使用openCV分离彩色图像中像素的BGR分量
【发布时间】:2012-04-04 17:59:01
【问题描述】:

由于每个像素内存包含蓝色、绿色和红色每个分量的 8 位。那么如何将这些组件从图像或图像矩阵中分离出来。作为 int Blue = f(Image(X,y));// (x,y) = Image 一个像素的坐标 同样,对于红色和绿色。 那么函数 f 和 2D 矩阵 Image 应该是什么;

提前致谢

【问题讨论】:

    标签: opencv


    【解决方案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 最好的书籍之一。对你有很大帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 2013-10-13
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      相关资源
      最近更新 更多