日期:2014-05-20 浏览次数:20719 次
// 创建sharp的图像: 查找边界 // ConvolveOp是最有用的,也是功能最强大的. convolve: 卷积 public BufferedImage useConvolveOp(BufferedImage src) { float[] sharpen = { 0.0f, -1.0f, 0.0f, -1.0f, 5.0f, -1.0f, 0.0f, -1.0f, 0.0f }; int kernelWidth = 3; int kernelHeight = 3; Kernel kernel = new Kernel(kernelWidth, kernelHeight, sharpen); ConvolveOp op = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, new RenderingHints( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR)); try { // 因为convole处理某些使用ImageIO读取的图片会出错 // 去掉边上的几个像素 BufferedImage newSrc = ImageUtil.createARGBBufferedImage(src, src.getWidth() + kernelWidth - 1, src.getHeight() + kernelHeight - 1); return op.filter(newSrc, null); } catch (Exception e) { e.printStackTrace(); } return null; }
------解决方案--------------------
上面的算法效果正好和你的要求相反,你把sharpen的数组换成如下面的,就变成了求像素的平均值,边沿柔和
0.1f 0.1f 0.1f
0.1f 0.2f 0.1f
0.1f 0.1f 0.1f
再调节这些值,反正就是他们的和要为1就行了,可以使用4*4, 5*5, ..., 等的数组,应该可以达到你的要求