一、图片处理的原理

首先我们知道数码照片只要是存储在计算机上的内容都是二进制码组成,而图片RGB值是由三组byte组成的( 255.0.0(红色)),所以它可以看成一个整数,红色即为:16711680。

图片数据用int类型二维数组表示。

电脑屏幕显示的图片是由一个个带颜色的小正方形组成的,每个小正方形只有一种颜色(它的值一般是0-16777215之间的一个整数),这样的小正方形就可以说是一个像素点,而我们平时所说的分辨率实际上就是 长 乘 宽 计算出一共能显示多少个像素点(比如1980*1080p 1376*720p)。

所以一张图片要设置一个二维数组,像素值就是其中的元素,值在0-16777215之间,这样每一个小方块都能独立的显示一个颜色,拼起来就是一张图片。也就是说,我们的重点是理解:将一张照片转为一个int类型的二维数组。

二、代码实现

1、想要写一个界面(具体参照之前的界面文章(4条消息) 用java实现界面设计和监听_m0_52346261的博客-CSDN博客)

package test5;import javax.swing.JFrame;
import java.awt.*;public class ImagePad extends JFrame{public static void main(String[] args){ImagePad imgpad = new ImagePad ();imgpad.initUI ();}public void initUI(){this.setTitle ("图像处理");this.setSize (800, 800);this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);this.setVisible (true);}@Overridepublic void paint(Graphics g){super.paint (g);// 此处用来绘制 绘制的代码都写在这里就可以  }
}

界面的效果:

2、我们尝试画一个200*200的图像,像素点的值我们让它随机,并且让它变暗画出变暗的图形。

        Random random = new Random();int[][] imgarr = new int[200][200];int[] arr = imgarr[0];imgarr[1][0] = 10;// 第二个一维数组的第一个数存储一个10for (int i = 0; i < 200; i++) {for (int j = 0; j < 200; j++) {// 随机一个(0-16777214)范围的整数int randomRGB = random.nextInt(16777215);imgarr[i][j] = randomRGB;// 如何绘制一个像素点Color color = new Color(randomRGB);g.setColor(color);g.fillRect(100 + i, 100 + j, 1, 1);}}// 遍历数组 取出所有的数设置为颜色再绘制出来for (int i = 0; i < 200; i++) {for (int j = 0; j < 200; j++) {int rgb = imgarr[i][j];//将数组中的值取出来,定义为rgb,这是一个一个(0-16777214)范围的整数Color color = new Color(rgb);//赋予Color类一个值
//                int blue = (rgb>>0)&0xFF;// 获取RGB三原色int red = color.getRed();int green = color.getGreen();int blue = color.getBlue();Color nColor = new Color(red / 2, green / 2, blue / 2);g.setColor(nColor);g.fillRect(350 + i, 100 + j, 1, 1);}}

界面效果:

3、显然,只随机生成是不够的,我们要编写一个能直接根据本机路径获取图片的函数并将图片显示在界面上。

//下接绘制的代码int [][] imgarr = getPixelArray("C:\\Users\\LENOVO\\Desktop\\蓝杰\\wxy.jpg");int w = imgarr.length;int h = imgarr[0].length;for(int i = 0 ; i < w ; i++){for(int j = 0 ; j < h ; j++){int rgb = imgarr[i][j];Color color = new Color(rgb);g.setColor(color);g.fillRect(50+i,50+j,1,1);}}}public  int[][] getPixelArray(String imgPath){File file = new File(imgPath);BufferedImage buffimg = null;try{buffimg  = ImageIO.read(file);}catch(IOException e){e.printStackTrace();}int w = buffimg.getWidth();int h = buffimg.getHeight();int[][] imgarr = new int[w][h];for(int i = 0 ; i < w ; i++){for(int j = 0 ; j < h ; j++){imgarr[i][j] = buffimg.getRGB(i,j);}}return imgarr;

界面效果:

4、通过代码对上传的图像进行各种图像的操作(重点)

①灰度处理

//下接绘制的代码int [][] imgarr = getPixelArray("C:\\Users\\LENOVO\\Desktop\\蓝杰\\wxy.jpg");int w = imgarr.length;int h = imgarr[0].length;for(int i = 0 ; i < w ; i++){for(int j = 0 ; j < h ; j++){int rgb = imgarr[i][j];Color color = new Color(rgb);// 获取RGB三原色int red = color.getRed();int green = color.getGreen();int blue = color.getBlue();//灰度int gray = (red + green + blue) / 3;// red=green=blue 则照片颜色只剩下灰阶色彩Color nColor = new Color (gray, gray, gray);//0-255g.setColor(nColor);g.fillRect(50+i,50+j,1,1);}}

界面效果:

②黑白二值化(没有灰色)

        //下接绘制的代码int [][] imgarr = getPixelArray("C:\\Users\\LENOVO\\Desktop\\蓝杰\\wxy.jpg");int w = imgarr.length;int h = imgarr[0].length;for(int i = 0 ; i < w ; i++){for(int j = 0 ; j < h ; j++){int rgb = imgarr[i][j];Color color = new Color(rgb);// 获取RGB三原色int red = color.getRed();int green = color.getGreen();int blue = color.getBlue();//灰度int gray = (red + green + blue) / 3;// red=green=blue 则照片颜色只剩下灰阶色彩Color nColor = new Color (gray, gray, gray);//0-255// 二值化 在灰度的基础上 通过灰度值来判断if(gray < 85){g.setColor (Color.BLACK);} else{g.setColor (Color.WHITE);}g.fillRect(50+i,50+j,1,1);}}

界面效果:

③反转颜色

        //下接绘制的代码int [][] imgarr = getPixelArray("C:\\Users\\LENOVO\\Desktop\\蓝杰\\wxy.jpg");int w = imgarr.length;int h = imgarr[0].length;for(int i = 0 ; i < w ; i++){for(int j = 0 ; j < h ; j++){int rgb = imgarr[i][j];Color color = new Color(rgb);// 获取RGB三原色int red = color.getRed();int green = color.getGreen();int blue = color.getBlue();//灰度int gray = (red + green + blue) / 3;// red=green=blue 则照片颜色只剩下灰阶色彩Color nColor = new Color (255-red, 255-green, 255-blue);//0-255g.setColor(nColor);g.fillRect(50+i,50+j,1,1);}}

界面效果;

④冷色调与暖色调

冷色调Color nColor = new Color (red/2, green/2, blue);//0-255

暖色调Color nColor = new Color (red, green/2, blue/2);//0-255

初学者,谢谢大家!

java简易美颜相机相关推荐

  1. 【JAVA】简易美颜相机

    简易美颜相机 简易美颜相机,是我最初接触JAVA的小项目,通过这个项目,我初步学会了许多JAVA的基础知识,下面就让我们开始吧! 首先让我们理清整个项目的大概逻辑: 1.一张图片和摄像头的显示以及各种 ...

  2. 基于OpenCV和OpenGL 的简易美颜相机

    版本信息 AndroidStudio 3.5.2 OpenCV 4.1.2 OpenGL 2 OpenCV是什么 维基百科 在本Demo中,OpenCV实现面部识别功能 OpenGL是什么 维基百科 ...

  3. java实现美颜相机

    看下实现效果 准备工作我们需要导入webcam包 ##  视频图像获取: http://webcam-capture.sarxos.pl/ ## 导包:  - Eclipse :   - * 项目: ...

  4. JAVA美颜相机入门(兼具图像处理和画图板功能)

    美颜相机已经成为当代年轻人不可或缺的自拍神器,其具有自动美肌,完美保留细节,让照片告别模糊等功能.或许我们会觉得编写这样一个具有如此强大功能的美颜相机一定需要庞大而且复杂的代码段,其实不然,即使对于初 ...

  5. Java美颜相机入门(图像处理实现各种滤镜算法)

    一.思路分析 一款简易美颜相机的功能我们可以简单分为两大块:1.图像处理    2.功能区 最终的效果图如下: 二.代码分析 图像处理工具的本质是处理像素点,而像素点的本质就是一种颜色,每一个像素点都 ...

  6. 【项目:实现美颜相机——java】

    我们可以用java代码实现美颜相机的功能. 类似于之前的图片处理效果: [java用监听器实现选择处理图片的效果]_ZERO_HOPE的博客-CSDN博客 摄像头抓取的图片一帧一帧地绘制在界面上,得到 ...

  7. JAVA PC端美颜相机

    这是我在蓝杰做的第一个项目:PC端美颜相机.这个小程序的本质就是对一张图像做处理.存储在计算机的图像信息实际上是一个个像素点,不同的像素点有不同的rgb值,修改像素点的rgb值我们就可以将图像处理成我 ...

  8. 小浩浅谈之Java美颜相机pc端(视频)

    在之前的文章中,给大家介绍了如果使用WebCamp来使用电脑的摄像头以及如何为图片添加各种滤镜,那么在这我们进行一个相互结合,就构成了一个我们pc端的美颜相机. 1.第一步和之前一样,就是框体 的创建 ...

  9. php图片美颜,Mac_Mac如何使用Photo Booth拍摄照片拍摄好玩好看的相片,  我们经常会使用美颜相机 - phpStudy...

    Mac如何使用Photo Booth拍摄照片拍摄好玩好看的相片 我们经常会使用美颜相机等拍摄一些好玩好看的相片,在MAC系统中也有一个小工具可以帮我们实现这个想法哦,那就是Photo Booth,我们 ...

最新文章

  1. open flash chart2 php,open flash chart2 图表导出到PDF,服务端语言为PHP
  2. nginx日志中文变成类似\xE9\xA6\x96\xE9\xA1\xB5-\xE6\x8E\xA8\xE8\x8D\x90的东西,治本方案
  3. RecSys 2016总结
  4. iMac建立到服务器的反向ssh
  5. git 无法提交空目录
  6. 微信小程序-配置请求合法域名的问题以及豆瓣api问题
  7. 找不出破绽!斯坦福等新研究:随意输入文本,改变视频人物对白,逼真到让作者害怕...
  8. LeetCode 139. 单词拆分(动态规划)
  9. Linux之Bash_Script_Program_002
  10. ZOJ4104 Sequence in the Pocket
  11. vmware虚拟机安装gho版本系统
  12. cocos之Gif图
  13. OneNote for win10 无法加载笔记本
  14. 【寒假每日一题2022】acw1934. 贝茜放慢脚步【二路归并】
  15. Lambda表达式详细总结
  16. Linux设备驱动之usb设备驱动详解
  17. 七个不可思议事件谜题
  18. alsa buffer原理_【关于alsa buffer】ALSA编程细节分析
  19. pycharm 第三方库加载不出来
  20. python-字体颜色

热门文章

  1. 多线程之旅(Task 任务)
  2. android wear悦跑圈,悦跑圈
  3. QT下载安装调试运行(QT5.5.1+VS2013)
  4. 桃李面包,破开烘培“局”
  5. esp8266 onenet MQTT固件的烧录
  6. java计算机毕业设计虚拟银行业务培训游戏源码+mysql数据库+lw文档+系统+调试部署
  7. 【Python爬虫项目】酷狗音乐附源码
  8. 深化生态合作,博睿数据APM正式上架华为云严选商城
  9. c语言将数组的列项向左移动,【数据结构与算法分析——C语言描述】第六章:优先队列(堆)...
  10. 脑洞巨大:2018版小学生神填空