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

Javaで画像のピクセル(RGB値)を取得する方法|getRGB()メソッドとシフト演算の使い方

デジタル画像とピクセルの仕組み

デジタル画像は、ピクセルと呼ばれる最小単位の要素が2次元配列状に並んで構成されており、ピクセルはデジタル画像を構成する最も小さな要素です。

各ピクセルにはアルファ(透明度)、赤、緑、青(ARGB)の4つの値が含まれており、それぞれの値は0〜255の範囲に収まります。これは1色あたり8ビット(2^8)で表現できることを意味します。

ARGBの各値は、4バイトのメモリに右から左の順序で格納されます。具体的には、青が0〜7ビット目、緑が8〜15ビット目、赤が16〜23ビット目、アルファが24〜31ビット目に配置されます。

画像のピクセル値(ARGB)を取得する手順

画像からピクセル値を取得する際の基本的な流れは以下の通りです。

  • 画像の高さと幅に対して二重ループを実行し、すべてのピクセルを走査します。
  • getRGB()メソッドを使用して、各座標のピクセル値を取得します。
  • 取得したピクセル値を引数としてColorオブジェクトを生成します。
  • getRed()、getGreen()、getBlue()メソッドを使って、それぞれ赤・緑・青の値を取り出します。

サンプルコード:全ピクセルのRGB値をファイルに出力する

次のJavaプログラムは、画像の全ピクセルを読み込み、そのRGB値をテキストファイルに書き出します。なお、この例ではOpenCVではなく、Java標準ライブラリのImageIOとBufferedImageを使用しています。

import java.io.File;
import java.io.FileWriter;
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class GetPixels {
    public static void main(String args[]) throws Exception {
        FileWriter writer = new FileWriter("D:\\Images\\pixel_values.txt");
        // 画像の読み込み
        File file = new File("D:\\Images\\cat.jpg");
        BufferedImage img = ImageIO.read(file);
        for (int y = 0; y < img.getHeight(); y++) {
            for (int x = 0; x < img.getWidth(); x++) {
                // ピクセルの内容を取得
                int pixel = img.getRGB(x, y);
                // ピクセル値からColorオブジェクトを生成
                Color color = new Color(pixel, true);
                // R・G・Bの値を取得
                int red = color.getRed();
                int green = color.getGreen();
                int blue = color.getBlue();
                writer.append(red + ":");
                writer.append(green + ":");
                writer.append(blue + "");
                writer.append("\n");
                writer.flush();
            }
        }
        writer.close();
        System.out.println("RGB values at each pixel are stored in the specified file");
    }
}

実行結果

RGB values at each pixel are stored in the specified file

コンソールには上記のメッセージが表示され、指定したファイルには「R:G:B」形式で各ピクセルのRGB値が1行ずつ書き込まれます。

シフト演算子でARGB値を直接取り出す方法

Colorオブジェクトを使わずに、シフト演算子を利用してピクセル値から直接ARGB値を取り出すこともできます。

  • 目的の色成分の先頭ビット位置まで右シフトします(アルファは24、赤は16、緑は8など)。
  • 右シフトだけでは他のチャンネルのビットが混ざってしまうため、0xffとのビットAND演算を行います。これにより下位8ビットだけが残り、それ以外のビットは無視されます。
int p = img.getRGB(x, y);
// ピクセル値からA・R・G・Bの各値を取得
int a = (p>>24) & 0xff;
int r = (p>>16) & 0xff;
int g = (p>>8) & 0xff;
int b = p & 0xff;
  1. Javaで画像のピクセル(RGB値)を設定・変更する方法

    ピクセルとはデジタル画像を構成する最小単位の要素であり、各ピクセルにはアルファ(透明度)、赤、緑、青の4つの値が含まれています。ピクセル値は32ビットのメモリ領域に、ARGBの順序で各8ビットずつ格納されています。そのため、画像の色を変更するには、以下の手順を実行する必要があります。画像内のすべてのピクセルを順番にループ処理する。getRGB()メソッドを使用してピクセル値を取得する。ピクセル値からARGB値を取り出す。RGB値に対して必要な変更を加える。変更後のRGB値で新しいピクセル値を作成する。setRGB()メソッドを使用して新しいピクセル値を設定する。ARGB値を設定する方法まず、ピ

  2. JavaとOpenCVライブラリを使って画像を保存(書き出し)する方法

    OpenCVライブラリを利用すると、画像フィルタリング、幾何学的変換、色空間の変換、ヒストグラム処理など、さまざまな画像処理操作を行うことができます。本記事では、その中でも基本的な操作である「画像の読み込みと保存(書き出し)」の方法を解説します。画像を書き出す(保存する)方法Imgcodecsクラスのimread()メソッドを使って画像を読み込むと、その内容はMat(Matrix)オブジェクトに格納されます。読み込んだ画像をファイルとして保存するには、imwrite()メソッドを使用します。imwrite()メソッドは、以下の2つの引数を受け取ります。file:保存先のファイルパスを表す文字列