2017-02-20 81 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