java如何处理灰度图片_Java图片的灰度处理方法

通过看网上各种大牛的总结,和自己亲身测试总结一下Java图片的灰度处理方法

(1)我们熟知的图片中的像素点有RGB值。

(2)图片灰度化的方式大概分为四种,第一种是最大值法(取颜色RGB中的最大值作为灰度值);第二种是最小值法(取颜色RGB的最小值作为灰度值);第三种是均值法(取颜色的RGB的平均值作为灰度值);第四种是加权法灰度化(怎么加权最合适,效果最好,百度百科说的很全面)。

(3)废话不多说,记录一下我按照上述四种方法实现的效果和代码:

原图

bda866d4f01a5c72fb6c7561addca5d8.png

按照上述四种方式分别灰度化后的效果如下面四图

0a3c47887bd346ea77e99dccd18c663d.png

72e8f2b6c50421637793c860670a4cf5.png

4b0e6beb6090244d76871fce09d71d46.png

7a2317140fdee6f8fed0b8245c5e12ad.png

(4)实例代码如下

package testhuidu;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

public class TestHUidu {

/**

* 颜色分量转换为RGB值

* @param alpha

* @param red

* @param green

* @param blue

* @return

*/

private static int colorToRGB(int alpha, int red, int green, int blue) {

int newPixel = 0;

newPixel += alpha;

newPixel = newPixel << 8;

newPixel += red;

newPixel = newPixel << 8;

newPixel += green;

newPixel = newPixel << 8;

newPixel += blue;

return newPixel;

}

public static void main(String[] args) throws IOException {

grayImage(1,"ff.jpg", "1.jpg");//最大值法灰度化

grayImage(2,"ff.jpg", "2.jpg");//最小值法灰度化

grayImage(3,"ff.jpg", "3.jpg");//平均值法灰度化

grayImage(4,"ff.jpg", "4.jpg");//加权法灰度化

}

/**

* 图片灰度化的方法

* @param status 灰度化方法的种类,1表示最大值法,2表示最小值法,3表示均值法,4加权法

* @param imagePath 需要灰度化的图片的位置

* @param outPath 灰度化处理后生成的新的灰度图片的存放的位置

* @throws IOException

*/

public static void grayImage(int status,String imagePath, String outPath) throws IOException {

File file = new File(imagePath);

BufferedImage image = ImageIO.read(file);

int width = image.getWidth();

int height = image.getHeight();

BufferedImage grayImage = new BufferedImage(width, height, image.getType());

//BufferedImage grayImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);

for (int i = 0; i < width; i++) {

for (int j = 0; j < height; j++) {

int color = image.getRGB(i, j);

final int r = (color >> 16) & 0xff;

final int g = (color >> 8) & 0xff;

final int b = color & 0xff;

int gray=0;

if(status==1){

gray=getBigger(r, g, b);//最大值法灰度化

}else if(status==2){

gray=getSmall(r, g, b);//最小值法灰度化

}else if(status==3){

gray=getAvg(r, g, b);//均值法灰度化

}else if(status==4){

gray = (int) (0.3 * r + 0.59 * g + 0.11 * b);//加权法灰度化

}

System.out.println("像素坐标:" + " x=" + i + " y=" + j + " 灰度值=" + gray);

grayImage.setRGB(i, j, colorToRGB(0, gray, gray, gray));

}

}

File newFile = new File(outPath);

ImageIO.write(grayImage, "jpg", newFile);

}

//比较三个数的大小

public static int getBigger(int x,int y,int z){

if(x>=y&&x>=z){

return x;

}else if(y>=x&&y>=z){

return y;

}else if(z>=x&&z>=y){

return z;

}else{

return 0;

}

}

//比较三个是的大小取最小数

public static int getSmall(int x,int y,int z){

if(x<=y&&x<=z){

return x;

}else if(y>=x&&y>=z){

return y;

}else if(z>=x&&z>=y){

return z;

}else{

return 0;

}

}

//均值法

public static int getAvg(int x,int y,int z){

int avg=(x+y+z)/3;

return avg;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java jsp校验提示信息_java Jquery表单校验代码jsp页面

jsp.file欢迎注册EasyMall/* 注册表单的js校验 */var formObj {/* 检查输入项是否为空 */"checkNull" : function(name, msg){var value $("input[name"name"]").val().trim();//清空之前的提示消息formObj.setMsg(name, "");if(val…

错误处理方法 java_JAVA常见错误处理方法 和 JVM内存结构

OutOfMemoryError在开发过程中是司空见惯的&#xff0c;遇到这个错误&#xff0c;新手程序员都知道从两个方面入手来解决&#xff1a;一是排查程序是否有BUG导致内存泄漏&#xff1b;二是调整JVM启动参数增大内存。OutOfMemoryError有好几种情况&#xff0c;每次遇到这个错误时…

java中如何分隔字符串_Java中分割字符串

java.lang.String的split()方法, JDK 1.4 or laterpublic String[] split(String regex,int limit)示例代码public classStringSplit {public static voidmain(String[] args) {String sourceStr "1,2,3,4,5";String[] sourceStrArray sourceStr.split(",&quo…

php测试号推送消息失败,信息发送失败是什么原因

手机突然信息发送失败可能是以下原因&#xff1a;1.是因为我们的手机出现了欠费的情况,所以发不出短信,这种情况是最为普遍的,需要我们及时的进行缴费。2.手机的信息中心的号码设置有误,应该根据你所在省份的实际信息中心号码进行设置,这样一般就能解决这方面的问题。可能是你的…

php ajax 概率 转盘,php+jquery实现转盘抽奖 概率可任意调

phpjquery实现转盘抽奖 概率可任意调phpjquery实现转盘抽奖 概率可任意调Posted by: xiaomiao 2014/05/13in Code, PHP 3 Commentsphpjquery实现转盘抽奖查看DEMO演示转盘抽奖&#xff0c;炫丽的一般是flash做的。不懂flash而又不需要那么炫丽&#xff0c;可以简单的通过jquer…

php自动抓取文章图片,从文章中提取图片,把图片保存到本地,自动提取缩略图...

开发二代旅游网站程序和CMS的时候&#xff0c;有一个需求&#xff0c;就是从网上复制的内容&#xff0c;里面包含图片的&#xff0c;需要对把图片提取出来&#xff0c;并且保存到本地&#xff0c;并且把图片的URL地址本地化&#xff0c;以下是实现的代码。开发二代旅游网站程序…

简单的php探针,php探针程序的推荐

在我们之前的文章已经为大家介绍了什么是php探针&#xff0c;以及他的主要作用是什么&#xff0c;如果你接触了cms或许就会有点了解&#xff0c;当然&#xff0c;不要紧&#xff0c;看完这篇就知道php探针是做什么的了。php探针通常是用来探测空间、服务器运行的状况和php相关信…

php熊掌号怎么设置json-ld,dedecms织梦系统对接百度熊掌号并添加JSON_LD数据

百度近期推出的百度熊掌号非常的不错,我的dedecms织梦系统早早就对接好了,它能对你的原创文章进行原创保护,并评出熊掌号搜索指数,熊掌号搜索指数是对你文章的内容质量,用户喜爱、原创能力、活跃表现、领域专注五个维度进行计算评估而得到的。你的dedecms织梦网站开通熊掌号之后…

php获取信息,PHP文件信息获取函数

知识点&#xff1a;basename():获取文件名&#xff0c;传入第二个参数则只显示文件名&#xff0c;不显示后缀dirname():获取文件路径pathinfo():将文件信息存入一个数组&#xff0c;通过索引basename&#xff0c;dirname&#xff0c;extension可以获得对应的文件名&#xff0c;…

mysql pdo 查询一条数据,使用 PDO 关联查询 MySQL 数据

使用pdo关联查询mysql数据try {$pdo new PDO(mysql:hostlocalhost;dbnametest;, root, 123456);// 0.等值联结$sql SELECT c.name, o.id, o.customer_id, o.price FROM orders o, customer c WHERE o.customer_id c.id AND c.name :name;// 1.内联结(与上面等值联结返回的查…

mysql 数据类型怎么用,myMySQL数据库怎么更改表中某字段的数据类型? MySQL数据库使用教程...

在mysql中&#xff0c;可以使用“ALTER TABLE”语句配合“MODIFY”关键字来更改表中某字段的数据类型&#xff1b;语法格式“ALTER TABLE MODIFY ”。(推荐教程&#xff1a;mysql视频教程)在 MySQL 中&#xff0c;ALTER TABLE 语句可以改变原有表的结构&#xff0c;例如增加或删…

matlab multithreading spyder,spyder和python的关系是什么

版权所有&#xff1a;http://wWw.pxcodeS.comspyder和python的关系&#xff1a;1、Spyder是Python的一个简单的集成开发环境&#xff1b;2、它和其他的Python开发环境相比**大的优点就是模仿MATLAB的“工作空间”的功能&#xff0c;可以很方便地观察和修改数组的值。LHF少儿编程…

python私有成员和保护成员,喜大普奔!Maya 2022来了?!

距离Maya 2020第一个版本发布已经过去将近1年半。各位用户苦等Maya 2021的发布&#xff0c;不料2021没等到&#xff0c;而Maya 2022要来了&#xff1f;&#xff01;这两天小编刷Maya官网&#xff0c;在帮助页面竟然看到官方放出了“Maya 2022 新特性”的页面&#xff01;吓得小…

php web教程视频教程下载,Web全栈 PHP+React系列视频教程下载

Web全栈 PHPReact系列视频教程下载课程介绍&#xff1a;此套Web全栈 PHPReact系列视频教程覆盖PHP、前端和区块链应用开发三大热门职位&#xff0c;教程对网络基础、前端基础(HTML CSSJavaScriptjQuery)、网站基础、PHP、React、区块链等均做了详细的讲解,无源码。Web全栈 PHPR…

mac怎么配置php开发环境变量,Mac M1安装mnmp(Mac+Nginx+MySQL+PHP)开发环境

之前刚装好了 HomeBrew &#xff0c;接下来就要安装 环境了。注意&#xff1a;如果 brew install 出以下错误, 则安装时使用arch -arm64 brew install软件包名 进行安装安装 Nginxbrew install nginx安装成功后,通过 brew info nginx ,查看 nginx 信息&#xff0c;最主要是看 网…

php5 dm.dll,win10模块dll加载失败二进制怎么解决?

首先使用【WinR】&#xff0c;打开运行窗口&#xff0c;输入“Powershell”&#xff0c;并回车&#xff1b;然后在打开的Powershell管理器中&#xff0c;输入“Get-AppXPackage -AllUsers | Foreach {....}”命令&#xff1b;最后等待系统自行处理即可解决方法&#xff1a;1、我…

oracle将千万行查询优化到一秒内,oracle下一条SQL语句的优化过程(比较详细)

oracle下一条SQL语句的优化过程(比较详细)更新时间&#xff1a;2010年04月14日 23:56:49 作者&#xff1a;很简单的一次调整&#xff0c;语句加了适当的索引后性能就有大幅的提升。当时看到这条语句的时候&#xff0c;第一感觉就是执行效率肯定低下。语句的功能是求某一客户当…

oracle tb级别数据量,备份TB级别Oracle数据库的一些技巧

备份TB级别数据的一些技巧1、 考虑使用增量备份&#xff0c; 不要老是想着用全量备份2、 对于增量备份而言 开启block change tracking 能极大地减少物理读&#xff0c;提升速度3、 11g以后对于bigfile tablespace可以启用section size 来提升速度4、 考虑到负载更低的 Data Gu…

oracle ora 47306,Oracle SQL提示含义与示例 --- 分布式查询和并行提示

《Oracle 高性能SQL引擎剖析&#xff1a;Oracle SQL 优化与调优技术详解》一书的附录部分。作为对该书的补充&#xff0c;帮助读者理解和掌握“提示”这一项在SQL优化中使用的这一重要辅助手段。语法&#xff1a;DRIVING_SITE([])描述&#xff1a;指示优化器选择那个数据库作为…

linux看网络电影,Linux中看电影、听音乐

Linux中看电影&#xff0c;听音乐目录&#xff1a;一、简介二、软件安装三、简单使用一、简介一直以来很多人不使用Linux作为自己的日常操作系统&#xff0c;是因为Linux在多媒体方面的应用不给力&#xff0c;现在的Linux有很多个版本(RedHat、Ubuntu、CentOS、SUSE等)。但这些…