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

将RGB图像转换为灰度图像以减少Java中的内存

双志强
2023-03-14
问题内容

我有一个RGB bufferedImage bImg。
我想将图像转换为灰度图像。

BufferedImage grayIm=new BufferedImage(bImg.getWidth(null), bImg.getHeight(null), BufferedImage.TYPE_BYTE_GRAY);

我已经尝试过此grayIm,但无法为该grayIm设置灰度值。


问题答案:

一种方法是转换色彩空间(性能不佳):

ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);  
ColorConvertOp op = new ColorConvertOp(cs, null);  
BufferedImage image = op.filter(bufferedImage, null);

另一种方法是像您一样使用BufferedImage(更好的性能):

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

最后但并非最不重要的一点是,最佳性能是使用GrayFilter:

ImageFilter filter = new GrayFilter(true, 50);  
ImageProducer producer = new FilteredImageSource(colorImage.getSource(), filter);  
Image mage = Toolkit.getDefaultToolkit().createImage(producer);

来源:http://www.codebeach.com/2008/03/convert-color-image-to-gray-scale-
image.html

编辑:根据马克的评论。



 类似资料:
  • 问题内容: 我试图用来读取RGB图像并将其转换为灰度。 在matlab中,我使用以下代码: 在matplotlib教程中,他们没有介绍。他们只是读了图像 然后将它们切成薄片,但这与根据我的理解将RGB转换为灰度不是同一回事。 我发现很难相信numpy或matplotlib没有将rgb转换为灰色的内置函数。这不是图像处理中的常见操作吗? 我写了一个非常简单的函数,可以在5分钟内使用导入的图像。这是非

  • 问题内容: 我正在使用aparapi编写Buddhabrot分形生成器。我将其中的OpenCL部分工作了,得到了一个表示每个像素的单维数组。我将最终图像的尺寸作为最终整数,并编写了代码以获取该数组中任意点的索引。我想将其另存为图像,并且尝试将BufferedImage与TYPE_USHORT_GRAY一起使用。这是我到目前为止的内容: 问题是,我不知道将RGB设置为什么。我需要做什么? 问题答案:

  • 问题内容: 我正在学习使用OpenCV进行实时应用程序的图像处理。我对图像进行了一些阈值处理,并希望将轮廓标记为绿色,但是由于我的图像是黑白图像,所以它们没有显示为绿色。 在程序的早期,我曾经将RGB转换为灰度,但是回过头来,我很困惑,该函数给出了: AttributeError:“模块”对象没有属性“ CV_GRAY2RGB”。 下面的代码似乎不是用绿色绘制轮廓。这是因为它是灰度图像吗?如果是这

  • 我正在学习使用OpenCV进行图像处理的实时应用程序。我对一个图像做了一些阈值化,想要用绿色标记轮廓,但它们没有显示在绿色中,因为我的图像是黑白的。 在程序的早期,我使用将RGB转换为灰度,但回到前面,我感到困惑,函数给出的是: AttributeError:“module”对象没有属性“cv_gray2rgb”。 下面的代码似乎没有用绿色绘制轮廓。这是因为它是灰度图像吗?如果是,我可以将灰度图像

  • 问题内容: 我想将具有形状的灰度图像转换为具有形状的3通道图像。使用可以完成工作,但是必须有一个整洁的方法。这是程序中的一段代码,有人可以提示。请指教。 问题答案: 您可以使用它来更简洁地完成此操作:

  • 如何将RGB彩色图像或简单的图像转换为CMY彩色图像,并提取每个组件青色(C)洋红色(M)和黄色(Y)?我的方法:-