Java中实现六种图像处理的效果(灰度化、马赛克效果、去背景实现、珠纹化实现、黑白版画效果、油画效果)

本文介绍了一种使用Java实现图像处理的方法,包括灰度化、马赛克效果、去背景、珠纹化、黑白版画和油画效果。通过监听器类和图像处理类,实现了对图片的各种艺术效果。用户可以通过按钮选择不同的效果应用到图片上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

Java中实现六种图像处理的效果(灰度化、马赛克效果、去背景实现、珠纹化实现、黑白版画效果、油画效果)

**
本文的编程的思想:
先将实现这六种效果的方法写入一个名为pic_performance的类,然后在监听器类Drawmouse类中通过pic_performance类去创建对象,然后利用该对象去调用里面相应的方法去实现相应的功能即可。

先来看看代码吧。

主类:

package com.yf1111;

import java.awt.FlowLayout;
import java.awt.Graphics;

import javax.swing.JButton;
import javax.swing.JFrame;


public class DrawFrame {
	public static void main(String[] args) {
		DrawFrame drawpanel = new DrawFrame();
		drawpanel.showUI();
		
	}
	
	public void showUI() {
		JFrame jf = new JFrame();
		jf.setTitle("图片");
		jf.setSize(1000, 1000);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setLayout(new FlowLayout());
		jf.setLocationRelativeTo(null);
		
		Drawmouse mouse = new Drawmouse();
		
		String[] name = {"灰度化","马赛克效果","去背景实现", "珠纹化实现", "黑白版画效果", "油画效果"};
		
		for(int i=0;i<name.length;i++){
			JButton jbu = new JButton(name[i]);
			jf.add(jbu);
			jbu.addActionListener(mouse);
			
		}
		jf.addMouseListener(mouse);
		
		jf.setVisible(true);
		
		//获取画笔一定要在可见之后
		Graphics g = jf.getGraphics();
		mouse.gr = g; 
		}
}

监听器类:

package com.yf1111;

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


public class Drawmouse implements ActionListener, MouseListener {
	public String name;
	public Graphics gr;

	pic_performance p =new pic_performance();
	
	public void actionPerformed(ActionEvent e) {
		name = e.getActionCommand();
		System.out.println(name+"点击了");
		
	}
	public void mouseClicked(MouseEvent e) {}

   
    public void mousePressed(MouseEvent e) {}

    public void mouseReleased(MouseEvent e) {

    	if("灰度化".equals(name)) {
    		p.drawpaint(gr);
    	}
    	if("马赛克效果".equals(name)) {
    		p.mark(gr);
    	}
    	if("去背景实现".equals(name)) {
    		p.decontextualization(gr);
    	}
    	if("珠纹化实现".equals(name)) {
    		p.texture_beading(gr);
    	}
    	if("黑白版画效果".equals(name)) {
    		p.gray(gr);
    	}
    	if("油画效果".equals(name)) {
    		p.painting(gr);
    	}
    }

    
    public void mouseEntered(MouseEvent e) {}

    public void mouseExited(MouseEvent e) {}
	
}

实现六种效果的方法类:

package com.yf1111;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Random;

import javax.imageio.ImageIO;

public class pic_performance {
	public String path = "image/3.jpg"; 
	
	//获取图像的像素值
	public int[][] getImagePixel(String path){
		File file = new File(path);
		
		BufferedImage bufferImage = null;
		try {
			bufferImage = ImageIO.read(file);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			
		}
		
		int w = bufferImage.getWidth();
		int h = bufferImage.getHeight();
		
		int [][] pixelArray = new int[w][h];
		
		for(int i = 0; i < w; i++) {
			for(int j = 0; j < h; j++) {
				//读取每个位置的像素点对应的RGB值
				int pixel = bufferImage.getRGB(i, j);
				pixelArray[i][j] = pixel;
			}
		}
		return pixelArray;
		
	}
	
	//去背景实现
	public void decontextualization(Graphics g) {
		int[][] img1 = getImagePixel(path);
		for(int i=0; i<img1.length; i++) {
			for(int j=0; j<img1[0].length; j++) {
				Color color = new Color(img1[i][j]);
				
				//去背景,只画高于某一值的颜色,有不同去背景效果
				int red = color.getRed();
				int green = color.getGreen();
				int blue = color.getBlue();
				if(blue>50) {
					Color nc =new Color(red, green, blue);
					g.setColor(nc);
					g.fillOval(i, j+100, 1, 1);
				}
			}
		}
	}
	
	
	//纹珠化实现
	public void texture_beading(Graphics g) {
		int[][] img2 = getImagePixel(path);
		for(int i=0; i<img2.length; i+=10) {
			for(int j=0; j<img2[0].length; j+=10) {
				Color color = new Color(img2[i][j]);
				
				//网格化,去掉一种颜色
				int red = color.getRed();
				int green = color.getGreen();
				int blue = color.getBlue();
				Color nc = new Color(red, green, blue);
				g.setColor(nc);
				g.fillOval(i, j+100, 8, 8);
			}
		}
	}
	
	//马赛克实现
	public void mark(Graphics g) {
		int[][] img3 = getImagePixel(path);
		
		for(int i=0; i<img3.length; i+=8) {
			for(int j=0; j<img3[0].length; j+=8) {
				Color c = new Color(img3[i][j]);
				
				//画方格子,则有马赛克效果
				int red = c.getRed();
				int green = c.getGreen();
				int blue = c.getBlue();
				Color nc = new Color(red, green, blue);
				g.setColor(nc);
				g.fillOval(i, j+100, 8, 8);
			}
			
		}
	}
	
	//黑白版画效果
	public void gray(Graphics g) {
		int[][] img4 = getImagePixel(path);
		for(int i=0; i<img4.length; i+=2) {
			for(int j=0; j<img4[0].length; j+=2) {
				Color c = new Color(img4[i][j]);
				
				//大于某个值则画黑,否则白色
				int b = c.getBlue();
				if(b<100) {
					g.setColor(Color.BLACK);
				}else {
					g.setColor(Color.WHITE);
				}
				g.fillOval(i, j+100, 4, 4);
			}
		}
	}
	
	//油画效果
	public void painting(Graphics g) {
		int[][] img5 = getImagePixel(path);
		for(int i=0; i<img5.length; i+=5) {
			for(int j=0; j<img5[0].length; j+=5) {
				Color c =new Color(img5[i][j]);
				g.setColor(c);
				
				//填充随机大小的色块
				Random ran = new Random();
				int r = ran.nextInt(20)+5;
				g.fillOval(i, j+100, r, r);
			}
		}
	}
	
	
	//灰度化
	public void drawpaint(Graphics g) {
		int[][] array = getImagePixel(path);
		for(int i = 0; i<array.length; i += 1) {
			for(int j = 0; j < array[0].length; j += 1) {
				int pixel = array[i][j];
				
				Color color = new Color(pixel);
				int red = color.getRed();
				int blue = color.getBlue();
				int green = color.getGreen();
				int avg = (int)(red + green + blue)/3; 
				Color col = new Color(avg, avg ,avg);
				g.setColor(col);
				g.fillRect(i, j+100, 1 , 1);
			}
		}
	}
}

实现的效果为:

1. 灰度化:

在这里插入图片描述

2. 马赛克效果:

在这里插入图片描述

3. 去背景实现:

在这里插入图片描述

4. 珠纹化实现:

在这里插入图片描述

5. 黑白版画效果:

在这里插入图片描述

6. 油画效果:

在这里插入图片描述

7. 原图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值