无法分割RGB通道

时间:2017-02-20 08:22:38

标签: opencv

在Windows上使用OpenCV 3.2.0,我试图将图像分割成其组件通道。我使用MS Paint(保存为24位BMP)创建了源图像文件,并将每个对象设置为纯色。从结果中可以看出,每个通道都包含该通道的数据。我很困惑。如何仅获取绿色图像中的绿色数据,依此类推?我使用以下代码:

#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <string>
#include <cstdlib>
#include "opencv2\opencv.hpp"

using namespace std;
using namespace cv;

const string    source_window = "Source";
const string    red_window = "Red";
const string    green_window = "Green";
const string    blue_window = "Blue";

int main (int Argc, char** Argv)
    {
    Mat         src = imread ("Test.bmp");
    vector<Mat> rgb;

    namedWindow (source_window, WINDOW_AUTOSIZE);
    namedWindow (red_window, WINDOW_AUTOSIZE);
    namedWindow (green_window, WINDOW_AUTOSIZE);
    namedWindow (blue_window, WINDOW_AUTOSIZE);

    imshow (source_window, src);
    cv::split (src, rgb);
    imshow (red_window, rgb [2]);
    imshow (green_window, rgb [1]);
    imshow (blue_window, rgb [0]);

    waitKey (0);
    }

Results

1 个答案:

答案 0 :(得分:2)

这应该是它的样子。考虑一下:

  • RGB中的白色:255,255,255
  • RGB中的红色:255,0,0
  • RGB中的绿色:0,255,0
  • RGB中的蓝色:0,0,255

如果将图像分割为多个通道,则无法在红色通道中看到白色背景上的红色对象(因为对象和背景的值均为255),对于其他通道也是如此。

为了让您的样品按预期工作,您应该用黑色填充背景。这样每个通道将“仅包含”相应的数字。