2017-02-20 104 views
2

在Windows上使用OpenCV 3.2.0,我试图将图像拆分为其组件通道。我使用MS Paint创建了源图像文件(保存为24位BMP),并将每个对象设置为纯色。从结果中可以看出,每个通道都包含所有内容,但包含该通道的数据。我很困惑。如何在绿色图像中获得绿色数据,等等?我使用下面的代码:无法拆分RGB通道

#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

回答

2

这是它应该如何看。试想一下:

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

如果拆分图像到通道,您将无法看到在白色背景的红色通道红色物体(因为这两个物体和背景具有值255),同样为其他通道。

为了使您的示例工作正如您所期望的那样,您应该使用黑色填充背景。这样每个通道只会“包含”相应的数字。

+0

我没有将背景设置为白色,为什么它是白色的?在红色窗口中,为什么我看不到有白色圆圈的黑色背景? – Brian

+0

在你的源图像背景是白色的,这就是我所指的。你看不到红色窗口中的黑色bg,因为对于白色背景红色通道具有255的强度 – alexisrozhkov

+0

啊,我明白了。谢谢。我编辑了源图像以将背景设置为黑色,现在我明白了我的期望。谢谢! – Brian