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

あなたのソースイメージには、背景が白です。それは私が言及したものです。白い背景のため赤いチャンネルが255の強さを持っているので、あなたは赤いウィンドウで黒いbgを見ません。 – alexisrozhkov

+0

ああ、そうです。ありがとう。バックグラウンドを黒に設定するためにソースイメージを編集しましたが、今は私が期待しているものを見ています。ありがとう! – Brian

関連する問題