1

QRコード画像を取得し、黒/白のピクセルを認識して配列に保持するプログラムを書いています。しかし、私の問題は次のとおりです。294x294 ピクセルの画像と、固定サイズ 21x21 のマトリックスが 1 つあります。したがって、1 つの正方形モジュールは、私にとって 294/21=4.0 ピクセルです。4.0 ピクセルから 4.0 ピクセルでピクセルを検索するにはどうすればよいですか? これが私のコードです:

public static void printAllARGBDetails(BufferedImage image) {
        int width = image.getWidth();
        int height = image.getHeight();
        System.out.println("Image Dimension: Height-" + height + ", Width-"
                + width);
        System.out.println("Total Pixels: " + (height * width));
        int pixels[][]=new int[21][21];
        int pixel=width/21;
        System.out.println("Pixel=" +pixel);

        for (int i = 20; i>=0 ; i--) {
            for (int j = 20; j>=0 ; j--) {
                if(image.getRGB(i, j)==-1)
                {

                    pixels[i][j]=0;
                }
                else
                {
                    pixels[i][j]=1;
                }

            }
        } 
  }

`

4

2 に答える 2

0

以下の編集されたコードは機能するはずですが、各要素の 16 ピクセルのうち 1 つしかテストしません。

    for (int i = 0; i<20 ; i++) {
        for (int j = 0; j<20 ; j++) {
            if(image.getRGB(i*4, j*4)==-1)
            {

                pixels[i][j]=0;
            }
            else
            {
                pixels[i][j]=1;
            }

        }
    } 
于 2012-11-14T17:02:43.090 に答える
0

おそらく、平均輝度に基づいて、4x4 配列のピクセルを0orに評価するメソッドを導入する必要があります。1

public static void printAllARGBDetails(BufferedImage image) {
    int width = image.getWidth();
    int height = image.getHeight();
    System.out.println("Image Dimension: Height-" + height + ", Width-"
            + width);
    System.out.println("Total Pixels: " + (height * width));
    int pixels[][]=new int[21][21];
    int pixel=width/21;
    System.out.println("Pixel=" +pixel);

    for (int i = 20; i>=0 ; i--) {
        for (int j = 20; j>=0 ; j--) {
                pixels[i][j] = getPixel (image, i, j);
                System.out.println(String.format ("Pixel[%d,%d]=%d", i, j, pixels[i][j]));
        }
    } 
}

private static final long LUMINOSITY_THRESHOLD = 23000;

private static int getPixel (BufferedImage image, int i, int j) {
   long totalLuminosity = 0;
   for (int k = 0; k < 4; k++) {
      for (int m = 0; m < 4; m++) {
          long luminosity = getLuminosity (image.getRGB (i*4 + k, j*4 + m));
          totalLuminosity += luminosity;
      }
   }

   return totalLuminosity/16 > LUMINOSITY_THRESHOLD ? 0 : 1;
}

private static int getLuminosity (int rgb) {
    int r = rgb >> 16;
    int g = (rgb >> 8) & 0xFF;
    int b = rgb & 0xFF;

    int luminosity = 21*r + 71*g + 7*b;

    return luminosity;
}    
于 2012-11-14T17:03:05.033 に答える