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

OpenCVでポインターメソッドを使用して色を減らす方法は?


画像処理では、画像に対して計算を行います。具体的には、ピクセル数が多いほど計算に時間がかかるように、ピクセル単位で計算を行います。計算時間を短縮するには、画像を効率的にスキャンする必要があります。ポインタを使用して効率的な画像スキャンループを実装する方法を学習します。

ここでは、減色戦略の例とともにピクセルスキャンプロセスを見ていきます。 RGB画像などのカラー画像は3チャンネルで構成されています。これらの各チャネルのピクセル数は同じですが、対応する値があります。この値はそれぞれ、8ビットのunsignedchar値です。

したがって、可能な色の総数は256 x 256 x 256=16,777,216です。各ピクセルの値を同じサイズの立方体で割って、この膨大な数の可能な色を減らすことができます。 8 x 8 x 8の立方体を使用して値を除算すると、可能な色の数は32 x 32 x 32=32,768色になります。

色数を減らすと、システムが高速になります。この削減を実行するには、各ピクセルをスキャンする必要がありますが、これは時間のかかる作業です。そのため、効率的な画像スキャン方法が必要です。

次のプログラムは、OpenCVのポインターメソッドを使用して色を減らす方法を示しています。

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;//Declaring cv namespace
using namespace std;//Declaring std namespace
void reducing_Color(Mat &image, int div=64){ //Declaring the function//
   int   total_rows = image.rows;//getting the number of lines//
   int total_columns = image.cols * image.channels();//getting the number of columns per line//
   for (int j = 0; j < total_rows; j++){ //initiating a for loop for rows
      uchar* data = image.ptr<uchar>(j);
      for (int i = 0; i < total_columns; i++){ //initiating a for loop for columns//
         data[i] = data[i] / div * div + div / 2;//processing the pixels//
      }
   }  
}
int main() {
   Mat image;//taking an image matrix//
   image = imread("grapes.jpg");//loading an image//
   namedWindow("Image Window");//Declaring another window//
   reducing_Color(image);//calling the function//
   imshow("Image Window", image);//showing the image with reduced color//
   waitKey(0);
   return 0;
}

出力

OpenCVでポインターメソッドを使用して色を減らす方法は?


  1. OpenCVライブラリを使用してポジティブイメージをネガティブに変換するにはどうすればよいですか?

    画像をネガに変換するアルゴリズム 各ピクセルの赤、緑、青の値を取得します 255から各色の値を引き、新しい色の値として保存します。 変更した色から新しいピクセル値を作成します。 新しい値をピクセルに設定します。 Javaでの実装 ImageIO.read()メソッドを使用して必要な画像を読み取ります。 画像の高さと幅を取得します。 ネストされたforループを使用すると、画像の各ピクセルをトラバースします。 getRGB()メソッドを使用してピクセル値を取得します。 上記で取得したピクセル値をパラメータとしてバイパスしてColorオブジェ

  2. Java OpenCVライブラリを使用してイメージを作成するにはどうすればよいですか?

    OpenCVライブラリを使用すると、画像フィルタリング、幾何学的画像変換、色空間変換、ヒストグラムなどの画像処理操作を実行できます。 画像を書く Imgcodecsクラスのimread()メソッドを使用して画像のコンテンツを読み取るたびに、結果がMatrixオブジェクトに読み込まれます。 imwrite()メソッドを使用してイメージを書き込み/保存できます。これは2つのパラメータ、つまり-を受け入れます ファイル −結果を保存するファイルパスを表す文字列値。 Img −保存する画像のデータを含むマトリックスオブジェクト。 例 次のJavaの例は画像の内容を読み取りますc