去除图片浅色背景(Java 实现)
- Java
- 2017-10-30
- 227热度
- 0评论
完成与去除图片浅色背景(PIL实现)同样的任务,实现方式为 Java。不同的是,手写实现“加权法”灰度化,在灰度化的同时去除背景。
参考文章:《Java实现图像灰度化》
源码如下:
import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class ImageDemo { private static int colorToRGB(int alpha, int red, int green, int blue) { int newPixel = 0; newPixel += alpha; newPixel = newPixel << 8; newPixel += red; newPixel = newPixel << 8; newPixel += green; newPixel = newPixel << 8; newPixel += blue; return newPixel; } /** * 去除模版浅色背景 * * @param inputPath 输入图片路径 * @param outputPath 处理后图片的输出路径 * @param outputFormat 输出格式(传入 ImageIO.write) * @param threshold 过滤阈值 * @exception IOException if an error occurs during writing. */ public static void convert(String inputPath, String outputPath, String outputFormat, int threshold) throws IOException{ BufferedImage bufferedImage = ImageIO.read(new File(inputPath)); BufferedImage grayImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), bufferedImage.getType()); for (int i = 0; i < bufferedImage.getWidth(); i++) { for (int j = 0; j < bufferedImage.getHeight(); j++) { final int color = bufferedImage.getRGB(i, j); final int r = (color >> 16) & 0xff; final int g = (color >> 8) & 0xff; final int b = color & 0xff; int gray = (int) (0.3 * r + 0.59 * g + 0.11 * b); if (gray > threshold) { gray = 255; } int newPixel = colorToRGB(255, gray, gray, gray); grayImage.setRGB(i, j, newPixel); } } File newFile = new File(outputPath); ImageIO.write(grayImage, outputFormat, newFile); } public static void main(String[] args) { try { convert("image/GettingStarted.png", "image/g1.png", "png", 175); convert("image/Balance.png", "image/b1.png", "png", 175); } catch (IOException e) { e.printStackTrace(); } } }
转换结果与 去除图片浅色背景(PIL实现) 一样,不赘述。