当前位置: 首页 > 面试题库 >

用Java在灰度图像中写入像素数据

郦何平
2023-03-14
问题内容

我正在开发一个有关图像处理的项目,在该项目中,我必须填充破裂绘画的数字化图像。我必须将彩色图像转换为灰度图像,对灰度图像的2Dhtml" target="_blank">数组执行一些计算,然后将其写回灰度图像。此代码是:

BufferedImage colorImage=ImageIO.read(new File(strImagePath));

            BufferedImage image = new BufferedImage(colorImage.getWidth(),colorImage.getHeight(),BufferedImage.TYPE_BYTE_GRAY);
            Graphics g = image.getGraphics();
            g.drawImage(colorImage, 0, 0, null);
            g.dispose();

            ImageIO.write(image,"PNG",new File("Image.PNG"));

            BufferedImage imgOriginal=ImageIO.read(new File("Image.PNG"));

            int width=image.getWidth();
            int height=image.getHeight();

            BufferedImage im=new BufferedImage(width,height,BufferedImage.TYPE_BYTE_GRAY);

            int arrOriginal[][]=new int[height][width];


            for(int i=0;i<height;i++)
                for(int j=0;j<width;j++)
                    arrOriginal[i][j]=imgOriginal.getRGB(j,i)& 0xFF;

            for(int i=0;i<height;i++)
                for(int j=0;j<width;j++)
                    im.setRGB(j,i,arrOriginal[i][j]);

            ImageIO.write(im,"PNG",new File("Image1.PNG"));

但是输出的图像要暗得多,我没有找回原始图像(我还没有做任何更改)。

我认为setRGB()语句中应该有一些更改,但我不知道是什么。

为了写回图像,我也尝试过:

`

BufferedImage im = new BufferedImage(width,height,BufferedImage.TYPE_BYTE_GRAY);
 WritableRaster raster = im.getRaster();
 for(int i=0;i<height;i++)
     for(int j=0;j<width;j++)
         raster.setSample(j,i,0,arrOriginal[i][j]);

`

但这也不会给我原始图像。

谁能提供我这个问题的解决方案?提前致谢。


问题答案:

我对基于Java的图像处理一无所知,但是总体上我对图像处理了解很多,所以我将看看是否能给您提供任何想法。如果我错了,请不要射击我-我只是在提出一个主意。

在灰度图像中,红色,绿色和蓝色值都相同,即Red = Green =
Blue。因此,当您调用getRGB并使用0xff进行AND运算时,您可能只会得到蓝色分量,但这没关系,因为红色和绿色是相同的-因为它是灰度的。

我怀疑问题在于,当您将其写回以创建新的输出图像时,您仅设置了蓝色组件,而不是设置了红色和绿色-它们应该仍然相同。尝试写回

original pixel + (original pixel << 8 ) + (original pixel <<16)

这样您不仅可以设置蓝色,还可以设置红色和绿色。



 类似资料:
  • 我只想弄清楚我的概念-访问CV::MAT的所有矩阵元素是否意味着我实际上访问了图像的所有像素值(灰度-1通道,颜色-3通道)?假设我的代码打印灰度矩阵的值(加载1通道图像,类型为CV_32FC1),如下所示,那么这意味着我只访问cv::mat的成员,还是我也访问图像的像素值(具有1通道灰度,类型为CV_32FC1)? 我对使用OpenCV进行图像处理还是一个新手,我想澄清一下我的想法。如果我错了,

  • 问题内容: 我正在尝试导出单色“灰度”图像中特定像素的强度值。我有一些伪代码,但是到目前为止,我还无法实现真正​​有效的功能。 问题答案: 也许这会帮助您: http://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html http://docs.oracle.com/javase/7/docs/api/javax

  • 实际上我想对每个像素做一些计算,为此我需要显式地访问每个像素。 如有任何帮助或建议,我们将不胜感激。

  • 所以我有一个字节数组,代表像素数据(8位灰度)。没有头球。没什么。只是数据。我想用这些数据创建一个缓冲图像。我做的 其中w只是以像素为单位的宽度,h是以像素为单位的高度,数据是字节数组,图像是BufferedImage 这是我的作画方法 然而,我得到了这个图像(真实图像是指纹,大部分是白色像素) 出什么事了?我试着按原样保存数据,然后在Photoshop中查看。数据很好。 [编辑]别管这个问题。我

  • 问题内容: 我尝试保存tiff而不是彩色的灰度。我该怎么办?(必须使用JAI,因为它是tiff!) 在此先感谢您,并致以最诚挚的问候。 问题答案: 您需要下载JAI Image I / O Tools,它提供了JAI的ImageIO适配器。安装完之后,一切顺利。

  • 本文向大家介绍Python图像灰度变换及图像数组操作,包括了Python图像灰度变换及图像数组操作的使用技巧和注意事项,需要的朋友参考一下 使用python以及numpy通过直接操作图像数组完成一系列基本的图像处理 numpy简介: NumPy是一个非常有名的 Python 科学计算工具包,其中包含了大量有用的工具,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。 数组对象可以实现数组