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

C ++を使用してOpenCVのマルチチャンネル画像からピクセル値を読み取る方法は?


「blue_Channel」、「green_channel」、「red_channel」という名前の3つの変数を宣言しました。これらの変数の目的は、ピクセル値を保存することです。これらの変数を「forループ」内で使用しました。次に、「color_Image_Matrix」という名前のマトリックスを宣言しました。

このメソッドの構文は次のとおりです。

blue_Channel = color_image_Matrix.at<Vec3b>(i, j)[0];

BGR画像を使用しました。 3つのチャネルがあります。これらのチャネルは特定のシーケンスを維持します。color_image_Matrix.at(i、j)は(i、i)にあるピクセル値を表し、[0]は最初のチャネルを表します。たとえば、次のように行を記述した場合:

blue_Channel=color_image_Matrix.at<Vec3b> (30, 35) [0];

これは、変数'blue_Channel'の最初のチャネルのピクセル値が(30、35)にあることを意味します。これが、OpenCVを使用してピクセル値にアクセスする方法です。

次のプログラムは、さまざまなRGB画像のピクセル値を読み取り、コンソールウィンドウにさまざまなチャネルピクセルの値を表示します。

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
   int blue_Channel;
   int green_Channel;
   int red_Channel;
   Mat color_image_Matrix; //Declaring a matrix to load the image//
   color_image_Matrix = imread("colors.jpg"); //loading image in the matrix//
   //Beginning of for loop to read pixel values of blue channel//
   for (int i = 0; i < color_image_Matrix.rows; i++)//loop for rows// {
      for (int j = 0; j < color_image_Matrix.cols; j++) {
         //loop for columns//
         blue_Channel = color_image_Matrix.at<Vec3b>(i, j)[0];
         //To read the value of first channel.Here the blue channel is first channel//
         cout << "Value of pixel of blue channel" << "(" << i << "," << j << ")" << "="
            << blue_Channel << endl; //showing the values in console window//
      }
   }
   //End of for loop to read pixel values of blue channel//
   //Beginning of for loop to read pixel values of green channel//
   for (int i = 0; i < color_image_Matrix.rows; i++)//loop for rows// {
      for (int j = 0; j < color_image_Matrix.cols; j++)//loop for columns// {
         green_Channel = color_image_Matrix.at<Vec3b>(i, j)[1];
         //To read the value of first channel.Here the green channel is first channel//
         cout << "Value of pixel of green channel" << "(" << i << ","
            << j << ")" << "=" << blue_Channel << endl;//showing the values in console window//
      }
   }
   //End of for loop to read pixel values of green channel//
   //Beginning of for loop to read pixel values of red channel//
   for (int i = 0; i < color_image_Matrix.rows; i++)//loop for rows// {
      for (int j = 0; j < color_image_Matrix.cols; j++)//loop for columns// {
         red_Channel = color_image_Matrix.at<Vec3b>(i, j)[2];
         //To read the value of first channel.Here the red channel is first channel//
         cout << "Value of pixel of red channel" << "(" << i << "," <<
            j << ")" << "=" << blue_Channel << endl; //showing the values in console window//
      }
   }
   //End of for loop to read pixel values of red channel//
   if (waitKey(0)==27);
      cout << "Image read successfully…!";
      return 0;
}

出力

Image read successfully...

このプログラムの実行には数分かかります。異なるチャネルから各ピクセル値を読み取ります。そのため、完全な結果が表示されるまでに数分かかります。


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

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

  2. Java OpenCVライブラリを使用して画像の明るさを変更するにはどうすればよいですか?

    convertTo() org.opencv.core.Matのメソッド クラスは、画像のコントラストと明るさを変更するために、指定された行列に対して必要な計算を実行します。このメソッドは4つのパラメーターを受け入れます- マット −ソース行列と同じサイズとタイプの結果を保持するための空行列。 rtype −出力マトリックスのタイプを指定する整数値。この値が負の場合、タイプはソースと同じになります。 アルファ −ゲイン値。0より大きくなければなりません(デフォルト値1)。 ベータ −バイアス値(デフォルト値0)。 OpenCVJavaライブラリを使用して画像の