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