C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++とOpenCVを使って画像を各チャネルに分割する方法

RGB画像には「赤・緑・青」の3つのチャネルが含まれています。赤、緑、青の各チャネルで画像を表現する色空間はRGBカラースペースと呼ばれます。ただし、OpenCVではRGBの代わりにBGRの順序が採用されている点に注意が必要です。つまり、第1チャネルが青(Blue)、第2チャネルが緑(Green)、第3チャネルが赤(Red)となります。

画像を各チャネルに分割するには、まず3チャネル分の行列を定義します。ここでは「Mat different_Channels[3]」という形式で3チャネルの行列を宣言します。

次に、OpenCVのsplit()関数を使って読み込んだ画像を分割します。この関数の書式は「split(ソース行列, 出力先行列)」です。ソース行列内の画像を各チャネルに分解し、結果を出力先の行列に格納します。実際のコードでは次のように記述します。「split(myImage, different_Channels);」

split関数を実行すると、青・緑・赤の各チャネルがdifferent_Channels行列に格納されます。続いて、以下のコードで各チャネルに保存された画像を新しい行列に読み込みます。

Mat b = different_Channels[0];//青チャネルを読み込む//
Mat g = different_Channels[1];//緑チャネルを読み込む//
Mat r = different_Channels[2];//赤チャネルを読み込む//

最後に、imshow()関数を使って各チャネルを個別のウィンドウに表示します。

imshow("Blue Channel",b);//青チャネルを表示//
imshow("Green Channel",g);//緑チャネルを表示//
imshow("Red Channel",r);//赤チャネルを表示//

以上の手順で、1枚の画像を構成する各チャネルに分割して表示することができます。

以下のサンプルプログラムは、RGB画像を青・緑・赤の3つのチャネルに分割して表示するものです。

サンプルコード

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc,const char** argv) {
   Mat myImage;//画像を読み込むための行列を宣言//
   Mat different_Channels[3];//3チャネルの行列を宣言//  
   myImage= imread("RGB.png");//myImage行列に画像を読み込む//
   split(myImage, different_Channels);//画像を3つのチャネルに分割//  
   Mat b = different_Channels[0];//青チャネルを読み込む//
   Mat g = different_Channels[1];//緑チャネルを読み込む//
   Mat r = different_Channels[2];//赤チャネルを読み込む//  
   imshow("Blue Channel",b);//青チャネルを表示//
   imshow("Green Channel",g);//緑チャネルを表示//
   imshow("Red Channel",r);//赤チャネルを表示//
   imshow("Actual_Image", myImage);//元の画像を表示//
   waitKey(0);//キー入力を待機//
   destroyAllWindows();//すべてのウィンドウを閉じる//
   return 0;
}

実行結果

C++とOpenCVを使って画像を各チャネルに分割する方法


  1. C++とOpenCVを使って画像を各チャネルに分割する方法

    RGB画像には「赤・緑・青」の3つのチャネルが含まれています。赤、緑、青の各チャネルで画像を表現する色空間はRGBカラースペースと呼ばれます。ただし、OpenCVではRGBの代わりにBGRの順序が採用されている点に注意が必要です。つまり、第1チャネルが青(Blue)、第2チャネルが緑(Green)、第3チャネルが赤(Red)となります。画像を各チャネルに分割するには、まず3チャネル分の行列を定義します。ここでは「Mat different_Channels[3]」という形式で3チャネルの行列を宣言します。次に、OpenCVのsplit()関数を使って読み込んだ画像を分割します。この関数の書式は

  2. C++とOpenCVで画像のチャンネル数を取得する方法を解説

    この記事では、OpenCVを使って画像のチャンネル数を調べる方法について解説します。プログラムを実行すると、コンソール画面に画像のチャンネル数が表示されます。チャンネル数を取得するには、OpenCVが提供するchannels()メソッドを使用します。このメソッドは、Matクラスのオブジェクト(画像行列)に対して呼び出すことで、その画像のチャンネル数を整数値として返します。例えば、カラー画像の場合は通常3チャンネル(BGR)、グレースケール画像の場合は1チャンネルとなります。画像処理を行う際、扱っている画像がカラーかモノクロかを判別するために、チャンネル数の確認は非常に重要な処理の一つです。以下