`
hello_wangfeng
  • 浏览: 32502 次
社区版块
存档分类
最新评论

java处理灰度图像时的问题

阅读更多
周六终于可以搞点自己的事情了...对于java图像处理来说,我还在门槛上徘徊,下面就将碰到的几个问题写下来:
1  在读入灰度图像时,inputImage = Toolkit.getDefaultToolkit().getImage("\\inputImage.jpg");无法读入灰度图像;
   改为
  File inputFile = new File("\\inputImage.jpg");
  BufferedImage input = ImageIO.read(inputFile);
  就可以读入了。

2  显示灰度图像时,有两种方法,一种是使用ImageProducer,如下
  ImageProducer ip = new MemoryImageSource(iw,ih,pixels,0,iw);
  tmp = createImage(ip);
  repaint();
  另一种方法是grayImage.setRGB,如下
  在两个for循环中调用grayImage.setRGB(i, j, rgb); 
  处理完后继续
  tmp = grayImage;
  repaint();
  这两种方法的区别是,第一种改变了灰度图像的像素值,使图像明显变亮,这应该是java的一个bug,无奈探讨的人少,具体原因我也不知道。第二种方法是没有问题。
  原始的lena图像在附件里,为lena_grey;显示如下:



  使用ImageProducer方法产生图片是附件里边的liang_lena_grey.jpg,可以从下图看到,图像明显变亮:




3  将paint函数写在这里吧:
  public void paint(Graphics g){
  if(flag_Load){
  g.drawImage(tmp,0,0,this);
  }else{}
  }

4  还有一个问题是如何保存图像。在使用ImageIO.write()是,我遇到的问题是
  sun.awt.image.ToolkitImage cannot be cast to java.awt.image.RenderedImage
  也就是说,tmp的类型是sun.awt.image.ToolkitImage,而ImageIO.write能操作的图像是      java.awt.image.RenderedImage,为了解决这个问题,需要转换一下格式再进行保存,程序如下:
  BufferedImage bi = new BufferedImage(tmp.getWidth(null),tmp.getHeight(null),
    BufferedImage.TYPE_INT_RGB);
            Graphics g = bi.getGraphics();
            g.drawImage(tmp,0, 0,null);
            g.dispose();
      File save_path=new File(filepath);
            ImageIO.write(bi, "JPG", save_path);

5  最后一个问题是像素值的获取。java好像没有直接读取灰度值的函数,在处理灰度图像时,java仍将灰度图像当做彩色图像处理,因此使用公式转换就好了。
  int rgb=inputImage.getRGB(i, j);
  int grey = (int) (0.3*((rgb & 0xff0000 ) >> 16) + 0.59*((rgb & 0xff00 ) >> + 0.11*((rgb & 0xff )));
  还要注意的是,直接调用inputImage.getRGB(i, j)得到的像素并不是我们熟悉的0-255,以lena为例,第5行第5列的像素值为-3026479,必须将red>>16,green>>8之后才能得到0-255之间的值,就像上面第二行代码写到的那样。转换完之后,-3026479就变成了209.


这几个问题虽然很小,但是相比C++,java图像处理的资料偏少,好多技术细节只能自己去摸索。
  • 大小: 218.6 KB
  • 大小: 28.9 KB
分享到:
评论

相关推荐

    java图片灰度处理,java图片去色

    以下是一个简单的Java代码示例,演示如何将彩色图像转换为灰度图像: ```java import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax....

    基于java的数字图像处理灰度变换源代码资料

    灰度变换是将彩色图像转换为单色(灰度)图像的过程,这有助于简化图像处理算法,并在分析图像特征时减少复杂性。 灰度变换是一种基本的图像处理操作,它通过改变像素的亮度值来调整图像的色调。在Java中,可以使用...

    用于图像处理的常见的灰度图像库

    4. **MATLAB Image Processing Toolbox**:MATLAB是科学研究和工程计算的强大工具,其Image Processing Toolbox提供了大量预定义的函数,用于灰度图像处理。例如,可以使用`imread()`读取图像,`rgb2gray()`转换为...

    JAVA基本数字图像处理

    在Java编程环境中,数字图像处理是一项重要的技术,广泛应用于图像分析、识别、增强等领域。"JAVA基本数字图像处理"这个项目旨在通过Java语言实现一系列基本的图像操作,以帮助开发者理解图像处理的基本原理并掌握其...

    5.1彩色图像转灰度

    OpenCV是一个强大的开源库,广泛用于图像处理和计算机视觉任务,它支持多种编程语言,包括Java。在这个Java OpenCV系列中,我们将探讨如何将彩色图像转换为灰度图像。 首先,了解彩色图像和灰度图像的基本概念。...

    Java/Matlab灰度图像的直方图均衡化、图像分割

    在图像处理领域,直方图均衡化和图像分割是两个重要的技术,特别是在处理灰度图像时。本项目涉及了从彩色图像转换到灰度图像,分析图像的灰度分布,执行直方图均衡化,以及基于直方图的图像分割过程。以下是这些概念...

    批量RGB图像转灰度图像

    在图像处理领域,将RGB图像转换为灰度图像是一项常见的任务。RGB图像由红(Red)、绿(Green)和蓝(Blue)三种颜色通道组成,而灰度图像则只有一个通道,其像素值代表亮度,从黑到白表示不同的灰度级别。批量处理...

    转化矩阵为灰度图像源码

    在IT领域,尤其是在图像处理与计算机视觉中,将矩阵转化为灰度图像是一项基本且重要的技能。根据提供的文件信息,我们探讨的主题是“转化矩阵为灰度图像源码”,这一过程通常涉及数学运算、图像处理算法以及编程实现...

    数字图像JAVA实现灰度 均衡化 中值滤波等

    本文将详细探讨使用Java语言实现灰度图像处理中的均衡化和中值滤波等关键技术。 首先,我们要了解灰度图像。在彩色图像中,每个像素通常由红、绿、蓝三个颜色通道组成,而在灰度图像中,每个像素只有一个值,代表其...

    java图像处理方法:灰度化,二值化,降噪,切割,裁剪,找相似等.zip

    Java图像处理是一个广泛的领域,它涉及对数字图像进行各种操作以改变或增强其视觉效果。在给定的压缩包文件中,我们重点关注几个关键的图像处理技术:灰度化、二值化、降噪、图像切割、裁剪以及寻找相似图像。下面将...

    java图像处理方法:灰度化,二值化,降噪,切割,裁剪,找相似等

    在Java编程语言中,图像处理是一项重要的技能,尤其在开发涉及图像分析、识别或美化功能的应用时。本篇文章将深入探讨几个关键的图像处理技术,包括灰度化、二值化、降噪、图像切割、裁剪以及寻找相似图像的方法。 ...

    基于java的数字图像出来灰度变换源代码资料

    通过学习和理解这些源代码,开发者不仅可以掌握灰度变换的基本原理,还能提升Java编程和图像处理的综合技能。这对于从事计算机视觉、图像分析或者相关领域的开发者来说,都是非常有价值的资源。

    数字图像实验,灰度化处理

    "湖.bmp"是一个可能用于实验的彩色图像文件,而"灰度图像处理.frm"则是处理灰度化操作的程序代码。"彩色图像处理.frm"和".vbp"文件可能包含了处理彩色图像的完整流程,包括读取、显示和转换等步骤。"图像几何变化....

    灰度图像压缩代码

    灰度图像压缩代码,多个m文件放到了一个txt文件里,用时自己拆分成6个m文件进行运行,欢迎大家学习

    java使图像灰度化

    在Java编程环境下,我们可以利用其丰富的库来实现图像的各种操作,其中包括将彩色图像转换为灰度图像的过程,也就是所谓的“灰度化”。灰度化是将彩色图像转化为单色图像的一种方法,通常每个像素由单一的灰度级表示...

    基于java的图像分割(数字图像处理)

    本项目是基于Java实现的图像分割算法,涉及到的知识点广泛,包括全局阈值分割、Roberts边缘检测以及灰度图像处理和直方图分析。 1. **全局阈值分割**: 全局阈值分割是一种简单的二值化方法,它通过设定一个全局...

    opencv+java实现灰度化、二值化、轮廓描边、边缘检测源码有注释

    灰度化是将彩色图像转换为单色图像的过程,通常用于简化图像处理。在OpenCV中,可以通过`cvtColor()`函数实现,传入源图像和目标图像的引用,以及`COLOR_BGR2GRAY`常量作为转换代码,表示从BGR色彩空间转换到灰度...

    灰度图像的直方图均衡化

    在图像处理领域,直方图均衡化是一种增强图像对比度的技术,特别适用于处理灰度图像。这个技术基于图像的像素强度分布,通过改变像素值来扩大图像的整体动态范围,使得图像的像素强度分布更加均匀。这有助于提升图像...

    chengxu.rar_JAVA图像去噪_java去噪_去噪Java_灰度化_灰度直方图

    在图像处理领域,Java语言因其跨平台性和丰富的库支持,被广泛用于开发各种图像处理算法。本项目"chengxu.rar"聚焦于一个关键任务:图像的灰度化与去噪,这对于理解和应用图像处理技术至关重要。以下是这些知识点的...

    java实现图像灰度反白

    在Java编程语言中,图像处理是一项常见的任务,其中包括将彩色图像转换为灰度图像和进行反白处理。这里我们将深入探讨这两个概念以及如何在Java中实现它们。 首先,灰度化是将彩色图像转化为单色的过程,每个像素点...

Global site tag (gtag.js) - Google Analytics