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

C ++を使用してOpenCVでヒストグラム均等化を適用するにはどうすればよいですか?


ヒストグラムは、画像の深度強度を表します。たとえば、色深度が8ビットの画像について考えてみます。これは、すべてのピクセルが0から平均0から255までの色深度を持つことができることを意味します。画像がRGB画像の場合、赤、緑、青のチャネルがあります。たとえば、画像のポイントには赤しかありません。次に、その画像の色深度は赤チャネルにあり、ピクセルの値は0から255まで変化します。0は赤がないことを意味し、255はより多くの読み取りを意味します。

ヒストグラムは、すべてのチャネルとすべての色についてこの種の結果を示しています。ピクセルの値を変更することにより、特定のカラーピクセルの強度を変更できます。たとえば、赤チャンネルの密度を上げたい場合は、赤チャンネルの値を変更できます。

まず、灰色の画像にヒストグラム均等化を適用します。グレー画像には白黒のみが含まれます。つまり、チャネルは1つだけです。画像は8ビット画像です。これは、色深度が0から255まで変化することを意味します。0は白を意味し、255は黒を意味します。次のコードでは、カラー画像をロードしてグレースケールに変換します。次に、OpenCVの「equalizeHist」関数を使用してピクセル値をイコライズします。

次のプログラムは、OpenCVでヒストグラム均等化を適用する方法を示しています。

#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main() {
   Mat original;//Declaring a matrix//
   original = imread("view.jpg");//loading the image
   Mat gray;//declaring a matrix//
   cvtColor(original, gray, COLOR_BGR2GRAY);//converting to grayscale//
   Mat hist;//declaring a matrix//
   equalizeHist(gray, hist);//applying histogram equalizer
   namedWindow("Original");//window for actual image//
   namedWindow("gray");//window for grayscale image//
   namedWindow("histogram");//window for histogram//
   imshow("Original", original);//showing actual image//
   imshow("gray", gray);//showing grayscale image//
   imshow("histogram", hist);//showing histogram effect
   waitKey(0);//wait for keystroke//
   return(0);
}

出力

C ++を使用してOpenCVでヒストグラム均等化を適用するにはどうすればよいですか?


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

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

  2. C ++を使用してOpenCVで画像をロードして表示するにはどうすればよいですか?

    このトピックでは、C++でOpenCVを使用して画像を読み込んで表示する方法を決定します。 OpenCVで画像を読み込んで表示するには、次の機能が必要です。 マット: マットは機能ではありません。これはデータ構造であり、変数の一種です。 C ++のint、char、string変数タイプと同様に、MatはOpenCVの変数であり、その中に画像をロードするためのマトリックスデータ構造を作成します。このプログラムでは、「MatmyImage;」と書きました。 これは、myImageという名前の行列変数を宣言していることを意味します。 namedWindow(): メモリを割り当て、画像を