java简易美颜相机

news/2024/10/31 3:25:43/

一、图片处理的原理

首先我们知道数码照片只要是存储在计算机上的内容都是二进制码组成,而图片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

初学者,谢谢大家!

 


http://www.ppmy.cn/news/437085.html

相关文章

NDK 开发实战 - 实现相机美颜功能

在 《图形图像处理 - 实现图片的美容效果》 一文中提到了图片的美容&#xff0c;采用双边滤波算法来实现&#xff0c;具体的算法流程和实现思路&#xff0c;大家可以在上篇文章中了解&#xff0c;这篇文章就在不再反复啰嗦了。这里我们再次来看下处理效果&#xff1a; 上面的效…

iOS-美颜相机 by GPUImage

之前网上有个段子说&#xff1a;日本女人靠化妆&#xff0c;韩国女人靠整容&#xff0c;中国女人靠美颜 足以证明相机美颜功能在中国地位是多么高&#xff0c;关于美颜相机的 App 在中国是那么的火 其实美颜相机的实现原理很简单&#xff0c;就是给采集到的图像通过添加滤镜进…

android 美颜相机开发,Android OpenGL ES从入门到进阶(一)—— 五分钟开发一款美颜相机...

源码链接:https://github.com/smzhldr/AGLFramework 一、前言 商店里有数十款的美颜相机类产品,以及像抖音,唱吧之类带有视频的软件,功能很强大,其实现原理基本上都是以OpenGL ES为核心的特效处理,笔者码了一个很轻量级的Android OpenGL ES及Camera开发框架,意在使用的时…

android自定义美颜相机,效果最自然 美颜相机for Android版更新

【IT168 资讯】备受爱自拍女生追捧的手机自拍神器“美颜相机”安卓版在八月初迎来了又一次重大改版&#xff0c;跟iPhone最新版一样&#xff0c;美颜相机安卓版1.3也在“自拍”功能中新增加了“美颜特效”模式&#xff0c;此外自拍瞬间的祛黑眼圈功能及祛斑功能再度升级&#x…

鸿蒙系统视频美颜,BeautyCam美颜相机

BeautyCam美颜相机app是一款超美的自拍相机软件。BeautyCam美颜相机app提供细腻质感滤镜和高级美颜功能&#xff0c;让你时刻保持好气色&#xff01; 软件介绍 BeautyCam美颜相机app是一款火爆全球的自拍神器。BeautyCam美颜相机app具有强大的功能&#xff0c;一键拍照美颜全搞…

java美颜相机

通过java来实现美颜相机需要以下步骤&#xff1a; 1.设置窗体&#xff08;画图版面、功能版面&#xff09; 2.添加动作监听器 3.对监听器的功能设置 一、设置窗体 首先我们应该设置美颜相机的窗体界面&#xff08;用边框布局BorderLayout&#xff09; 我们可以直接通过创建…

美颜相机基本算法总结

一、主要内容概述 本文主要是对美颜相关的一些内容的学习做一个总结&#xff0c;一个基本的美颜相机大概包含了美颜和美型两个方面&#xff0c;美颜主要是磨皮美白等效果&#xff0c;美型则是对眼睛、鼻子、脸型等做一些微调&#xff1b;大多美型相机还会提供各式各样的滤镜、…

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

我们可以用java代码实现美颜相机的功能。 类似于之前的图片处理效果&#xff1a; 【java用监听器实现选择处理图片的效果】_ZERO_HOPE的博客-CSDN博客 摄像头抓取的图片一帧一帧地绘制在界面上&#xff0c;得到视频效果。 我们对图片进行处理&#xff0c;就能得到滤镜效果的…