画像データの変換例2

17th October 2021 at 8:44pm

「ImageJのRGB画像データの配列」は、int配列であると画像データの変換例で述べました。

では、1ピクセルの色を表現するint値から、どうやってRGBの輝度値(byte値)を取り出すのでしょうか。以下に説明します。

intは32bitです。1byte × 4のサイズです。

ImageJにおいて、上位1byteに透過率(a)、次に赤(r)、その次に緑(g)、下位1byteに青(b)の輝度値が収納されています。それぞれをビット演算を駆使して、取り出します。

int配列 image の i 番目の赤(r)、緑(g)、青(b)の輝度値を求めます。

byte b = (byte)(image[i] & 0xff);
byte g = (byte)((image[i] >> 8) & 0xff);
byte r = (byte)((image[i] >> 16) & 0xff);

赤(r)、緑(g)、青(b)の輝度値から、int配列 image の i 番目の値を求めます。

int b_int = (int)b;
int g_int = (int)g << 8;
int r_int = (int)r << 16;
int a_int = 0xff000000;
image[i] = a + r + g + b;

こちらに、「ImageJのRGB画像データの配列」と「OpenCVのMatクラス」の変換を行う関数がありますので、参考にしてください。


HomeへImageJの記事Topへ