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

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

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

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

原图

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

(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;

}

}

java如何处理灰度图片_Java图片的灰度处理方法相关推荐

  1. java join使用实例_Java多线程中关于join方法的使用实例解析

    先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String ...

  2. 海信JAVA开发笔试题_JAVA设计模式之【工厂方法模式】

    看例子 1.TV产品接口,负责播放 public interface TV // TV接口 { public void play(); } 2.TV工厂接口,负责生产产品 public interfa ...

  3. Java 比较图片_Java图片比对

    在自动化测试中,除了普通的值验证,经常还有一些图片验证,比如图片的匹配率,输出图片的差异图片等.本文主要用到了BufferedImage类来操作图片比对和输出差异图片,大体的思路如下: 1. 通过Im ...

  4. java ftp传图片_Java 图片上传方式一 : ftp 图片服务器

    一 : Linux ftp 图片服务器 1. Linux 安装 ftp linux服务器配置 安装ftp yum install vsftpd 启动服务 service vsftpd start 开机 ...

  5. java修改图章图片_Java处理PDF图章的方法示例(代码)

    本篇文章给大家带来的内容是关于Java 处理PDF图章的方法示例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 图章(印章)是一种在合同.票据.公文等文件中表明法律效应.部门 ...

  6. java打包 图片_Java 图片爬虫,java打包jar文件

    [TOC] 1. Java 图片爬虫,制作 .jar 文件 spider.java spider.java 高清图片api : https://www.xwboke.cn/api/api.php ,每 ...

  7. java实现上传图片代码_Java图片上传实现代码

    本文实例为大家分享了java图片上传代码,供大家参考,具体内容如下 import java.io.*; import java.net.*; /* *发送端 */ class picsend { pu ...

  8. java ajax上传图片插件_java图片上传并预览,前台用jQuery插件AjaxFileUpload,后台用FileUtils.copyFile....

    个人笔记,以备后用. 表体代码: 查看图片 js代码(记得要引入jquery库和ajaxfileupload库): //上传文件id号 function fileUpload(uploadFileId ...

  9. java不显示图片_Java图片显示不出来,怎么解决

    展开全部 有两个问题:图片路径没有写对,图片在 src 下,图片路径应是 src/海洋.png,正e68a84e8a2ad62616964757a686964616f31333365656632确的写 ...

最新文章

  1. IDEA工具基本设置
  2. 使用分页插件的后悔药(二)
  3. apache tomcat 整合
  4. 操作主机 RID matser
  5. app接口开发(php)
  6. 为TFS配置跨平台的生成服务器Xplat (Ubuntu Linux)
  7. STM32低功耗模式测试
  8. 前端界面根据条件动态显示图片
  9. pip常用命令、配置pip源
  10. MVC5+EF6--1 创建Entity Framework数据模型
  11. 把我的漫画浏览器后台程序迁移到GAE上了
  12. python下载大文件mp4_Python 实现视频爬取下载及断点续传优化、异步下载
  13. android ios av tv,无需Apple TV的AirPlay镜像的顶级4解决方案您应该知道
  14. safari遮罩无效
  15. 分享学JavaScript的第七天
  16. 移动端事件--touch事件的分类、touch事件的event对象、 其他触摸事件
  17. JavaScript全套课程-张鹏-专题视频课程
  18. 谷歌浏览器在新页面打开_如何在Google文档中更改页面方向
  19. [工具类] 系列二 Lettuce 访问Redis 工具类 RedisUtil
  20. 计算机属性高级是灰色的,Win10文件夹属性隐藏选项为灰色不可勾选怎么办?

热门文章

  1. 转:javascript方法--bind()
  2. linux 中文意思,linux 中 ~/. 是什么意思
  3. ladder怎么读_ladder 是什么意思_ladder 的翻译_音标_读音_用法_例句_爱词霸在线词典...
  4. faiss python安装_faiss入门
  5. 使用python打印数字三角形_11届省赛python试题 H: 数字三角形
  6. 判断星座PHP,php根据日期判断星座的函数分享_PHP教程
  7. oracle 9i hwm,Oracle 10g HWM原理及性能优化
  8. Leetcode-2 两数相加【c语言】
  9. STM32-GPIO学习-跑马灯实验和按键实验-寄存器版本和HAL库版本
  10. (连续子序列)唯一的雪花