2015-07-27 17 views
9

ile nasıl bulanıklaştırılır Görüntünün bir kısmı, kredi kartı bilgileri gibi bazı özel bölümleri gizlemek için nasıl bulanıklaştırılır.Bir görüntünün bir bölümünü JAVA

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); 

o görüntü tamamen bulanık olması dışında, iş gibi görünüyor:

ben gibi ConvolveOp.class kullanmayı deneyin.

+2

Gerçekten ben sadece uymak ve soru aslında görüntüleri evriştirerek hakkında bana bir şey öğretti söylemek istedim söyleniyor, size yardımcı olamaz ve bulanık, bu yüzden bunun için teşekkürler! :) –

cevap

1

Bu matris değerleri değiştirerek yapılabilir mi bilmiyorum, ama bu kesinlikle BufferedImage.getSubimage() belgelere göre, çünkü, bir alt imge filtreleyerek mümkün olmalıdır:

BufferedImage hisselerini geri döndü Orijinal görüntü ile aynı veri dizisi.

Yani BufferedImage böyle koduyla değişmelidir orijinal:

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); 

olsa bu test etmedi ve ben filter beklendiği gibi çalışmıyor tahmin edebilirsiniz source ve destination eğer Aynı durumda, bu durumda, alt menünün bir kopyasını kullanarak, çözümü this question:

BufferedImage image = /* ... */; 
BufferedImage dest = image.getSubimage(10, 20, 30, 40); // x, y, width, height 
ColorModel cm = dest.getColorModel(); 
BufferedImage src = new BufferedImage(cm, dest.copyData(dest.getRaster().createCompatibleWritableRaster()), cm.isAlphaPremultiplied(), null).getSubimage(0, 0, dest.getWidth(), dest.getHeight()); 
new ConvolveOp(new Kernel(20, 20, matrix), ConvolveOp.EDGE_NO_OP, null).filter(src, dest); 
Bundan sonra

, image ile çalışmaya devam (değilsubImage, src veya dest!)

+0

Bu çözüm, görüntüyü iki parçaya ayırır. o zaman birleştirmek mümkün mü? –

+0

"İki parçaya" ne demek istiyorsun? Bulanık bir alan ve bulanık olmayan bir alan mı? Ya da tam olarak ne olur? Çünkü dediğim gibi, bunu test etmedim. – Siguza

+0

Evet, bulanık alan ve bulanık olmayan bir alan ayrılır. –

1

Eğer uygulamaya değil, görüntü işleme özelliklerine odaklanmak istiyorum durumda, bir görüntü işleme çerçevesini kullanabilirsiniz Marvin gibi. Böylece daha az kodla daha fazlasını yapabilirsiniz.

Girdi resim:

enter image description here

Çıktı resim:

enter image description here

Kaynak kodu:

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); 
    } 
} 

Gauss bulanıklığı algoritması kaynak kodu:

https://github.com/gabrielarchanjo/marvinproject/blob/master/marvinproject/dev/MarvinPlugins/src/org/marvinproject/image/blur/gaussianBlur/GaussianBlur.java

+0

ama bu durumda gaussianBlur yöntemi nedir? –

+0

gaussianBlur (input_image, output_image, radius, pixels_mask), görüntüyü bir Gauss işlevini kullanarak bulanıklaştırır. Wikipedia'da Gaussian Blur: https://en.wikipedia.org/wiki/Gaussian_blur –

+0

Bize java kullanarak bu yöntemin bir örneğini verebilir misiniz? –

İlgili konular