**

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 exceptione.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. 原图:

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

  1. Java 简单图片 马赛克,黑白画,珠纹化,油画效果等处理技术 原理及实现 (简单UI)

    Java 图片马赛克,黑白画,珠纹化,油画效果等处理技术 原理及实现 1. 需要用到的包 java.awt // 用于创建用户界面和绘制图形图像的所有类 javax.swing // 提供一组&quo ...

  2. [转载] JAVA中分为基本数据类型及引用数据类型

    参考链接: C++和Java中布尔数据类型的比较 一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型, ...

  3. Java中的实现马赛克效果以及灰度效果----整张图片

    ** Java中的实现马赛克效果以及灰度效果-----整张图片 ** 实现该效果的思路: 我们知道图片是由一个一个的像素组成的,比如一张图片的分辨率为800 * 800,则它是由800个像素 * 80 ...

  4. Java中实现图像的卷积效果

    ** Java中实现图像的卷积效果 ** 图像的卷积: 指的是使用一个卷积核(kernel)对图像中的每一个像素进行一些列操作.卷积核(算子)是用来做图像处理时的矩阵,图像处理时也称为掩膜,是于原图像 ...

  5. 图像处理:黑白效果(灰度处理)

    图像处理:黑白效果(灰度处理) Posted on  2008-10-29 17:01  parker 阅读( 2686) 评论( 0)  编辑  收藏 1.效果图:          2.实现原理: ...

  6. 操作系统中进程的五种状态与JAVA中线程的六种状态

    操作系统中的五种状态 新建:创建新的进程 就绪:进程已经获得除CPU时间片以外的任何资源,一旦获得cpu时间片就能立马执行. 执行:处于就绪队列中的进程获得了时间片运行进程. 阻塞:进程时间片用完进入 ...

  7. java中break,continue,標籤實現goto效果(編程思想)

    goto 編程語言中一開始就有goto關鍵詞了.事實上,goto起源於彙編語言的進程控制:"若條件A成立,則調到這裏:否則跳到那裏". goto語句時在源碼級別上的跳轉,這導致了其 ...

  8. java 中的finally你知多少_「JAVA」详述Java异常体系,处理异常时配上finally效果更佳...

    什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般化的情况.在平时生活中,医生 ...

  9. 【Android RTMP】x264 图像数据编码 ( NV21 格式中的 YUV 数据排列 | Y 灰度数据拷贝 | U 色彩值数据拷贝 | V 饱和度数据拷贝 | 图像编码操作 )

    文章目录 安卓直播推流专栏博客总结 一. NV21 图像数据中的 YUV 数据简介 二.向 x264 编码图片 三. 提取 NV21 数据中的灰度数据 Y 四. 提取 NV21 数据中的饱和度数据 U ...

最新文章

  1. CES Asia专题|微鹅展示无线充电,智能手机的无线充电时代何时来临?
  2. 如何从机器学习数据中获取更多收益
  3. MOS管好坏的判别方法
  4. linux进程管理之进程创建
  5. 成为阿里 P7 真的难么?
  6. jetson nano poe_工业POE交换机工作流程及使用注意事项介绍
  7. 领域驱动设计,让程序员心中有码(四)
  8. 玩转算法之面试第九章-动态规划
  9. 专访阿里数据库备份专家 教你pick最有效的备份系统
  10. 使用 Inno Setup 快速打包你的应用程序
  11. 很吊炸天的Xcode插件,你想要的这都有
  12. java实验报告心得_Java实验报告(一)及总结
  13. 在SQL Server中导入数据库(.mdf格式)
  14. 清华计算机系人工智能学院,CoAI - 清华大学交互式人工智能课题组
  15. xp怎么设置计算机共享的打印机共享的打印机共享,Windows XP系统如何快速设置共享打印机?...
  16. 周报格式(sohu)
  17. Gitlab-runner(一)安装
  18. [生存志] 第56节 李聃函谷授道德经
  19. c++实现DLL注入的几种方式
  20. windows Phone 8 (1)

热门文章

  1. ASP MVC 后台控制器弹出框提示
  2. 零基础学习python爬虫_教你零基础如何入门Python爬虫!
  3. virtualbox centos5 分辨率_一种高分辨率、高帧率的LCoS显示芯片设计方法
  4. 多条SQL语句同时执行方法
  5. python 问题不符合dcp rule_约束不遵循CVXPY中的DCP规则
  6. python画图的模块_用python和pygame游戏编程入门-画图模块
  7. PTA 基础编程题目集 7-6 混合类型数据格式化输入 C语言
  8. mysql查询表的数据大小
  9. C# 操作Excel之旁门左道 [ C# | Excel ]
  10. server 2008 中活动目录的迁移