gpt4 book ai didi

Java模糊图像

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:37 24 4
gpt4 key购买 nike

我想模糊图像

   int radius = 11;
int size = radius * 2 + 1;
float weight = 1.0f / (size * size);
float[] data = new float[size * size];

for (int i = 0; i < data.length; i++) {
data[i] = weight;
}

Kernel kernel = new Kernel(size, size, data);
ConvolveOp op = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
//tbi is BufferedImage
BufferedImage i = op.filter(tbi, null);

它会模糊图像,但不会模糊图像的所有部分。

enter image description here

我遗漏的地方会模糊完整的图像。没有任何路径。

最佳答案

标准的 Java ConvolveOp 只有两个选项 EDGE_ZERO_FILLEDGE_NO_OP。您需要的是 JAI 等效项 (ConvolveDescriptor) 中的选项,即 EDGE_REFLECT(或 EDGE_WRAP,如果您想要重复模式)。

如果您不想使用 JAI,您可以自己实现,方法是将图像复制到更大的图像,拉伸(stretch)或包裹边缘,应用卷积运算,然后切掉边缘(类似于描述的技术在@halex 在评论部分发布的 the article 的“在边缘工作”部分,但根据该文章,您也可以只保留边缘透明)。

为简单起见,您可以只使用 my implementation called ConvolveWithEdgeOp执行上述操作(BSD 许可证)。

代码将与您原来的代码类似:

// ...kernel setup as before...
Kernel kernel = new Kernel(size, size, data);
BufferedImageOp op = new ConvolveWithEdgeOp(kernel, ConvolveOp.EDGE_REFLECT, null);

BufferedImage blurred = op.filter(original, null);

过滤器应该像任何其他 BufferedImageOp 一样工作,并且应该与任何 BufferedImage 一起工作。

关于Java模糊图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29295929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com