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

C ++を使用してOpenCVで画像を異なるチャネルに分割するにはどうすればよいですか?


RGBイメージには、赤、緑、青の3つのチャネルがあります。赤、緑、青のチャンネルが画像を表す色空間は、RGB色空間と呼ばれます。 OpenCVでは、RGBの代わりにBGRシーケンスが使用されます。これは、最初のチャネルが青、2番目のチャネルが緑、3番目のチャネルが赤であることを意味します。 RGB画像を異なるチャネルに分割するには、3つのチャネルのマ​​トリックスを定義する必要があります。 'Matdifferent_Channels[3]'を使用します 3チャネルマトリックスを定義します。

次に、OpenCVの'split()'関数を使用して、ロードされた画像を分割します。この関数の形式は'split(Source Matrix、Destination Matrix)'です。 この関数は、ソースマトリックスの画像を画像のチャネルに分割し、宛先マトリックスに保存します。この行は動作しています– 'split(myImage、different_Channels);'

分割関数は、青、緑、赤のチャネルを「different_channels」マトリックスにすでにロードしています。次の行を使用して、さまざまなチャネルに保存されている画像を新しいマトリックスにロードしました。

Mat b = different_Channels[0];//loading blue channels//
Mat g = different_Channels[1];//loading green channels//
Mat r = different_Channels[2];//loading red channels//

そして最後に、次の行を使用して各チャネルを異なる方法で表示しました-

imshow("Blue Channel",b);//showing Blue channel//
imshow("Green Channel",g);//showing Green channel//
imshow("Red Channel",r);//showing Red channel//

これが、画像をチャネルに分割する方法です。

次のプログラムは、RGB画像を青、緑、赤のチャンネルに分割します。

#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;//declaring a matrix to load the image//
   Mat different_Channels[3];//declaring a matrix with three channels//  
   myImage= imread("RGB.png");//loading the image in myImage matrix//
   split(myImage, different_Channels);//splitting images into 3 different channels//  
   Mat b = different_Channels[0];//loading blue channels//
   Mat g = different_Channels[1];//loading green channels//
   Mat r = different_Channels[2];//loading red channels//  
   imshow("Blue Channel",b);//showing Blue channel//
   imshow("Green Channel",g);//showing Green channel//
   imshow("Red Channel",r);//showing Red channel//
   imshow("Actual_Image", myImage);//showing actual image//
   waitKey(0);//wait for key stroke
   destroyAllWindows();//closing all windows//
   return 0;
}

出力

C ++を使用してOpenCVで画像を異なるチャネルに分割するにはどうすればよいですか?


  1. C ++を使用してOpenCVで画像を異なるチャネルに分割するにはどうすればよいですか?

    RGBイメージには、赤、緑、青の3つのチャネルがあります。赤、緑、青のチャンネルが画像を表す色空間は、RGB色空間と呼ばれます。 OpenCVでは、RGBの代わりにBGRシーケンスが使用されます。これは、最初のチャネルが青、2番目のチャネルが緑、3番目のチャネルが赤であることを意味します。 RGB画像を異なるチャネルに分割するには、3つのチャネルのマ​​トリックスを定義する必要があります。 Matdifferent_Channels[3]を使用します 3チャネルマトリックスを定義します。 次に、OpenCVのsplit()関数を使用して、ロードされた画像を分割します。この関数の形式はspli

  2. C ++を使用してOpenCVの画像のチャンネル数を計算するにはどうすればよいですか?

    このトピックでは、画像のチャンネル数を確認する方法を理解します。プログラムを実行すると、チャンネル番号がコンソールウィンドウに表示されます。 チャネルの番号を取得するために、channels()という名前のOpenCVのクラスを使用しました。 クラスchannels()のオブジェクトとして画像マトリックスを渡すと、チャネルに整数値が与えられます。 次のプログラムは、チャネルの数をカウントし、コンソールウィンドウに表示します。 例 #include<iostream> #include<opencv2/highgui/highgui.hpp> using namesp