3

画像処理をしているのですが、質問があります。

プロジェクトから画像を読み込み、画像をグレーに変換します。現在、関数 rgb2gray で変換しようとしていますが、まだ機能していません。

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class ImageTesting extends Component {
    private static int[] pixel;
    private static BufferedImage b;

    BufferedImage image;

    public void paint(Graphics g) {
        g.drawImage(image, 0, 0, null);
    }

    public ImageTesting() {
        try {
            image = ImageIO.read(new File("teste.jpg"));
        } catch (IOException e) {
        }
    }

    public Dimension getPreferredSize() {
        if (image == null) {
            return new Dimension(400, 400);
        } else {
            return new Dimension(image.getWidth(null), image.getHeight(null));
        }
    }

    public static BufferedImage rgb2gray(BufferedImage bi) {
        int heightLimit = bi.getHeight();
        int widthLimit = bi.getTileWidth();
        BufferedImage converted = new BufferedImage(widthLimit, heightLimit, BufferedImage.TYPE_BYTE_GRAY);
        for (int height = 0; height < heightLimit; height++) {
            for (int width = 0; width < widthLimit; width++) {
                Color c = new Color(bi.getRGB(width, height) & 0x00fffff);
                int newRed = (int) ((0.2989f * c.getRed()) * 2);// 0.2989f//multiplicr po 2
                int newGreen = (int) ((0.5870f * c.getGreen()) * 2);// 0.5870f
                int newBlue = (int) ((0.1140f * c.getBlue()) * 2);
                int roOffset = newRed + newGreen + newBlue;
                converted.setRGB(width, height, roOffset);
            }
        }
        return converted;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        JFrame f = new JFrame("Load Image Sample");
        JFrame g = new JFrame("Image RGB");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        g.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        f.add(new ImageTesting());
        f.pack();
        f.setVisible(true);
        g.add(new ImageTesting());
        rgb2gray(b);
    }
}

プログラムを実行すると、次のエラーが表示されます。

誰かが私を助けることができれば、私は感謝します。ありがとう

編集: この問題は解決できましたが、別の質問が出てきました。私の仕事を続けるには、結果の画像で最も 10 個の輝かしい点を見つけ、値 0 を持つインデックスの黒色と値 1 を持つインデックスの白色を持つ別の画像を返したいのですが、この時点では手順を実行する最善の方法がわかりません。

4

2 に答える 2

1

main() メソッドに問題があるようですね。完全に同一の JFrame インスタンスを 2 つ作成し、元の画像を表示する Imagetesting コンポーネントを追加します。最後に rgb2gray を実行すると、結果はどこにも送信されません。

于 2013-04-18T12:40:36.287 に答える
0

画像フィルターの使用をお勧めします。関連ドキュメントはこちらを参照してください: http://www.jhlabs.com/ip/filters/

高性能で使いやすいです。

于 2013-04-18T14:51:10.140 に答える