Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用JAVA模糊图像的一部分_Java_Image Processing_Blur - Fatal编程技术网

如何用JAVA模糊图像的一部分

如何用JAVA模糊图像的一部分,java,image-processing,blur,Java,Image Processing,Blur,如何模糊图像的一部分,隐藏一些隐私部分,如信用卡信息 我尝试使用ConvolveOp.class,如: float[] matrix = new float[400]; for (int i = 0; i < 400; i++) matrix[i] = 1.0f/500.0f; BufferedImage sourceImage = (BufferedImage) image; ; BufferedImage destImage = null ; BufferedImageOp

如何模糊图像的一部分,隐藏一些隐私部分,如信用卡信息

我尝试使用ConvolveOp.class,如:

float[] matrix = new float[400];
for (int i = 0; i < 400; i++)
    matrix[i] = 1.0f/500.0f;

BufferedImage sourceImage =  (BufferedImage) image; ;
BufferedImage destImage = null ;
BufferedImageOp op = new ConvolveOp( new Kernel(20, 20, matrix), ConvolveOp.EDGE_NO_OP, null );
BufferedImage blurredImage = op.filter(sourceImage, destImage);
float[]矩阵=新浮点[400];
对于(int i=0;i<400;i++)
矩阵[i]=1.0f/500.0f;
BuffereImage sourceImage=(BuffereImage)image;
buffereImage destImage=null;
BufferedImageOp op=new ConvolveOp(新内核(20,20,矩阵),ConvolveOp.EDGE_NO_op,null);
BuffereImage blurredImage=op.filter(源图像,目标图像);

除了图像完全模糊外,它似乎可以工作。

我不知道是否可以通过更改矩阵值来实现,但通过过滤子图像肯定可以做到这一点,因为根据文档:

返回的
buffereImage
与原始图像共享相同的数据数组

因此,原始
缓冲区图像
应使用如下代码进行更改:

BufferedImage image = /* ... */;
BufferedImage subImage = image.getSubimage(10, 20, 30, 40); // x, y, width, height
new ConvolveOp(new Kernel(20, 20, matrix), ConvolveOp.EDGE_NO_OP, null).filter(subImage, subImage);
但是我没有对此进行测试,我可以想象,如果
目的地
相同,则
过滤器
无法按预期工作,在这种情况下,您可以使用子映像的副本,使用以下解决方案:


之后,继续使用
image
not
subImage
src
dest
!)

如果您想专注于应用程序而不是图像处理的细节,可以使用类似的图像处理框架。因此,您可以用更少的代码做更多的事情

输入图像:

import static marvin.MarvinPluginCollection.*;

public class PortionBlur {
    public PortionBlur(){
        // 1. Load image
        MarvinImage image = MarvinImageIO.loadImage("./res/credit_card.jpg");

        // 2. Create masks for each blurred region
        MarvinImageMask mask1 = new MarvinImageMask(image.getWidth(), image.getHeight(), 38,170,345,24);
        MarvinImageMask mask2 = new MarvinImageMask(image.getWidth(), image.getHeight(), 52,212,65,24);
        MarvinImageMask mask3 = new MarvinImageMask(image.getWidth(), image.getHeight(), 196,212,65,20);
        MarvinImageMask mask4 = new MarvinImageMask(image.getWidth(), image.getHeight(), 38,240,200,20);

        // 3. Process Image with each mask
        GaussianBlur gaussianBlur = new GaussianBlur();
        gaussianBlur.load();
        gaussianBlur.attributes.set("radius",15);

        gaussianBlur.process(image.clone(), image, mask1);
        gaussianBlur.process(image.clone(), image, mask2);
        gaussianBlur.process(image.clone(), image, mask3);
        gaussianBlur.process(image.clone(), image, mask4);

        // 4. Save the final image
        MarvinImageIO.saveImage(image, "./res/credit_card_out.jpg");
    }
    public static void main(String[] args) {
        new PortionBlur();
        System.exit(0);
    }
}

输出图像:

import static marvin.MarvinPluginCollection.*;

public class PortionBlur {
    public PortionBlur(){
        // 1. Load image
        MarvinImage image = MarvinImageIO.loadImage("./res/credit_card.jpg");

        // 2. Create masks for each blurred region
        MarvinImageMask mask1 = new MarvinImageMask(image.getWidth(), image.getHeight(), 38,170,345,24);
        MarvinImageMask mask2 = new MarvinImageMask(image.getWidth(), image.getHeight(), 52,212,65,24);
        MarvinImageMask mask3 = new MarvinImageMask(image.getWidth(), image.getHeight(), 196,212,65,20);
        MarvinImageMask mask4 = new MarvinImageMask(image.getWidth(), image.getHeight(), 38,240,200,20);

        // 3. Process Image with each mask
        GaussianBlur gaussianBlur = new GaussianBlur();
        gaussianBlur.load();
        gaussianBlur.attributes.set("radius",15);

        gaussianBlur.process(image.clone(), image, mask1);
        gaussianBlur.process(image.clone(), image, mask2);
        gaussianBlur.process(image.clone(), image, mask3);
        gaussianBlur.process(image.clone(), image, mask4);

        // 4. Save the final image
        MarvinImageIO.saveImage(image, "./res/credit_card_out.jpg");
    }
    public static void main(String[] args) {
        new PortionBlur();
        System.exit(0);
    }
}

源代码:

import static marvin.MarvinPluginCollection.*;

public class PortionBlur {
    public PortionBlur(){
        // 1. Load image
        MarvinImage image = MarvinImageIO.loadImage("./res/credit_card.jpg");

        // 2. Create masks for each blurred region
        MarvinImageMask mask1 = new MarvinImageMask(image.getWidth(), image.getHeight(), 38,170,345,24);
        MarvinImageMask mask2 = new MarvinImageMask(image.getWidth(), image.getHeight(), 52,212,65,24);
        MarvinImageMask mask3 = new MarvinImageMask(image.getWidth(), image.getHeight(), 196,212,65,20);
        MarvinImageMask mask4 = new MarvinImageMask(image.getWidth(), image.getHeight(), 38,240,200,20);

        // 3. Process Image with each mask
        GaussianBlur gaussianBlur = new GaussianBlur();
        gaussianBlur.load();
        gaussianBlur.attributes.set("radius",15);

        gaussianBlur.process(image.clone(), image, mask1);
        gaussianBlur.process(image.clone(), image, mask2);
        gaussianBlur.process(image.clone(), image, mask3);
        gaussianBlur.process(image.clone(), image, mask4);

        // 4. Save the final image
        MarvinImageIO.saveImage(image, "./res/credit_card_out.jpg");
    }
    public static void main(String[] args) {
        new PortionBlur();
        System.exit(0);
    }
}
高斯模糊算法源代码:

import static marvin.MarvinPluginCollection.*;

public class PortionBlur {
    public PortionBlur(){
        // 1. Load image
        MarvinImage image = MarvinImageIO.loadImage("./res/credit_card.jpg");

        // 2. Create masks for each blurred region
        MarvinImageMask mask1 = new MarvinImageMask(image.getWidth(), image.getHeight(), 38,170,345,24);
        MarvinImageMask mask2 = new MarvinImageMask(image.getWidth(), image.getHeight(), 52,212,65,24);
        MarvinImageMask mask3 = new MarvinImageMask(image.getWidth(), image.getHeight(), 196,212,65,20);
        MarvinImageMask mask4 = new MarvinImageMask(image.getWidth(), image.getHeight(), 38,240,200,20);

        // 3. Process Image with each mask
        GaussianBlur gaussianBlur = new GaussianBlur();
        gaussianBlur.load();
        gaussianBlur.attributes.set("radius",15);

        gaussianBlur.process(image.clone(), image, mask1);
        gaussianBlur.process(image.clone(), image, mask2);
        gaussianBlur.process(image.clone(), image, mask3);
        gaussianBlur.process(image.clone(), image, mask4);

        // 4. Save the final image
        MarvinImageIO.saveImage(image, "./res/credit_card_out.jpg");
    }
    public static void main(String[] args) {
        new PortionBlur();
        System.exit(0);
    }
}

我真的帮不了你,我只是想插话告诉你,你的问题实际上教会了我一些关于卷积图像和模糊的知识,谢谢你!)此解决方案将图像分为两部分。那么有可能合并吗?你说的“分为两部分”是什么意思?模糊区域和非模糊区域?或者到底发生了什么?因为正如我所说,我没有测试这个。是的,模糊区域和非模糊区域是分开的。但是像。。。彼此挨着,还是一个在另一个里面?对不起,我的英语质量太高了。所以,问题是我不知道如何保存图像上的更改。我试图创建一个新的图像(模糊),但它只保存图像的一部分(模糊区域)!!!但在这种情况下,高斯模糊法是什么?高斯模糊法(输入图像、输出图像、半径、像素、遮罩)使用高斯函数模糊图像。维基百科上的高斯模糊:你能给我们一个使用java的这种方法的例子吗?根据你最近的变化,我编辑了你的answer@KarimOukara您可以从URL请求一个图像,创建一个BuffereImage,然后使用构造器new MarvinImage(BuffereImage)创建一个MarvinImage。正在从Java中的URL加载图像: