1
public static void main(String[] args) throws IOException {

        File original_f = new File(args[0]);
        String[] parts= args[0].split("\\.");
        String output_f = parts[0]+"_bin";
        original = ImageIO.read(original_f);
        grayscale = toGray(original);
        binarized = binarize(grayscale);            //Converts pixel of image in black((0,0,0)) or white( (255,255,255) )

        writeImage(output_f,parts[1]);

}   

private static void writeImage(String output, String part) throws IOException {
        File file = new File(output+".bmp");
        ImageIO.write(binarized, "bmp", file);
}

画像を二値化した後、正しい答えが得られます。二値化されたピクセル (コード内の変数) は、 (0,0,0) または (255,255,255) のいずれかです。

しかし、Image を jpg 形式で書き込んだ後、ピクセルは正しくなくなり、イメージを bmp 形式で書き込めば、ピクセルは正しくなります。

誰が理由を説明できますか???

4

2 に答える 2

1

JPEG は非可逆画像圧縮ファイル形式です。非可逆圧縮により、ピクセルの色値の精度がいくらか失われます。ビットマップはロスレス形式ですが、圧縮はありません。無損失圧縮には PNG を使用できます。

于 2013-06-08T10:23:23.937 に答える
0

Sun JDK に含まれている JPEG エンコーダーを使用している場合は、アルファ チャネルのない画像を渡すことも確認する必要があります。

于 2013-06-08T10:21:36.173 に答える