Java图像处理:库与工具完全概览
Java提供了强大的位图图像处理工具——从简单的加载和保存到使用滤镜和神经网络的复杂处理。在本文中,我们将介绍三种主要方法:内置库Java 2D、专用库ImageJ以及工业标准OpenCV。您将了解如何选择合适的工具,并看到可运行的代码示例。
1. 内置库 Java 2D (javax.imageio, java.awt)
Java 2D 是 Java 标准库 (JDK) 的一部分。它无需安装额外依赖,非常适合基本操作:加载、调整大小、裁剪、文本叠加和简单滤镜。
主要类:
javax.imageio.ImageIO— 读取和写入图像(PNG、JPEG、BMP、GIF、WBMP)。java.awt.image.BufferedImage— 内存中的图像表示,可访问像素。java.awt.Graphics2D— 绘图上下文(缩放、旋转、叠加)。java.awt.image.BufferedImageOp— 滤镜接口(模糊、对比度、色彩校正)。
示例 1:加载、调整大小和保存
import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;
public class ImageResizer { public static void main(String[] args) throws IOException { // 加载原始图像 BufferedImage original = ImageIO.read(new File("input.jpg"));
// 新尺寸(例如,缩小到 300x200) int newWidth = 300; int newHeight = 200;
// 创建具有所需尺寸的新图像 BufferedImage resized = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = resized.createGraphics();
// 绘制缩放后的原始图像 g2d.drawImage(original, 0, 0, newWidth, newHeight, null); g2d.dispose();
// 保存结果 ImageIO.write(resized, "jpg", new File("output.jpg")); System.out.println("完成!尺寸已更改。"); }}示例 2:应用内置滤镜(模糊)
import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.awt.image.ConvolveOp;import java.awt.image.Kernel;import java.io.File;
public class BlurFilter { public static void main(String[] args) throws Exception { BufferedImage img = ImageIO.read(new File("input.jpg"));
// 3x3 模糊核(盒式模糊) float[] blurKernel = { 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f }; Kernel kernel = new Kernel(3, 3, blurKernel); ConvolveOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); BufferedImage blurred = convolve.filter(img, null);
ImageIO.write(blurred, "jpg", new File("blurred.jpg")); }}2. ImageJ 库——用于科学和医学图像
ImageJ 是一个流行的图像处理工具,最初用 Java 编写。它提供数百个现成的插件、宏和强大的 API。非常适合显微分析、卫星图像以及任何需要像素统计的任务。
依赖配置 (Maven):
<dependency> <groupId>net.imagej</groupId> <artifactId>ij</artifactId> <version>1.53t</version></dependency>示例:直方图分析和阈值处理
import ij.IJ;import ij.ImagePlus;import ij.