Java对图像的处理,具有相当强的表现能力,下列程序可以将普通照片生成类似于手绘的素描。
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.File;
import javax.imageio.ImageIO;
public class sketch {
public static void main(String[] args) throws Exception{
String file1 = "D:/1.jpg";//原文件
String file2 = "D:/2.jpg";//素描
File inputFile = new File(file1);
BufferedImage old = ImageIO.read(inputFile);
//去色
BufferedImage b1 = discolor(old);
//反相
b1 = invert(b1);
//高斯模糊
float[][] matric = gaussian2DKernel(3, 3f);
b1 = convolution(b1, matric);
//叠加
b1 = deceaseColorCompound(old, b1);
//黑白
ColorSpace cs1 = ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op1 = new ColorConvertOp(cs1, null);
BufferedImage b2 = new BufferedImage(old.getWidth(), old.getHeight(), BufferedImage.TYPE_INT_RGB);
op1.filter(b1, b2);
ImageIO.write(b2, "jpg", new File(file2));
System.out.println("生成素描");
}
//去色
public static BufferedImage discolor(final BufferedImage sourceImage) {
final int width = sourceImage.getWidth();
final int height = sourceImage.getHeight();
final BufferedImage retImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
final int color1 = sourceImage.getRGB(i, j);
final int a1 = (color1 >> 24) & 0