日期:2014-05-20 浏览次数:20916 次
    // 创建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, ..., 等的数组,应该可以达到你的要求