gpt4 book ai didi

java - 如何使用 BufferedImage 和 YCbCr 色彩空间?

转载 作者:行者123 更新时间:2023-12-02 08:33:00 28 4
gpt4 key购买 nike

我需要将加载到 BufferedImage 的位图中的颜色从 RGB 转换为 YCbCr(亮度和 2 channel 色度),并在处理后转换回来。

我在每个像素的主方法中使用像 rgb2ycbcr() 这样的函数来实现它,但这不是那么聪明的解决方案。我应该使用 ColorSpace 和 ColorModel 类来获取具有正确颜色空间的 BufferedImage。这会是更灵活的方法,但我不知道该怎么做。

我迷路了,我需要一些提示。有人可以帮助我吗?

最佳答案

据我了解您的问题,您想要执行以下操作:

加载 RGB 图像 -> 处理 YCbCr 图像 -> 再次使用 RGB 图像

您希望我们帮助您,使这个过程尽可能顺利。首先,您希望我们为您提供一种简单的方法来避免 ->(转换)部分。

好吧,我调查了 BufferedImage documentation 。似乎不存在一种方法可以更改曾经创建的 BufferedImageColorSpace

您可以创建一个具有 YCbCr 颜色空间的新 BufferedImage,您可以使用预定义的 ICC_ColorSpace 。然后,您可以通过 ColorSpace.fromRGB 将旧图像中的数据复制到 YCbCr 色彩空间,进行图像处理,然后通过 ColorSpace.toRGB 再次转换。该方法需要您通过现有方法对处理前后的图像进行完全转换。此外,您还必须知道ICC_ColorSpace如何将图像转换为YCbCr色彩空间。否则您无法知道哪个数组索引对应于同一像素。

如果您只想在 RGB-BufferedImage 周围创建一个包装器,让您可以操纵该图像,就像它是 YCbCr 图像一样,则 BufferedImage 是不可能实现的。.

编辑:要转换 BufferedImage 的颜色空间,请使用 ColorConvertOp 。代码看起来像这样:

ColorConvertOp cco = new ColorConvertOp(new YCbCrColorSpace(), null);
BufferedImage ycbcrImage = cco.filter( oldRGBImage, null );

这要求您编写自己的 ColorSpace 类,或者您可以下载并使用提到的类 here 。如果您只想加载 JPEG 图像,您应该使用 predefined classes .

关于java - 如何使用 BufferedImage 和 YCbCr 色彩空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2779951/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com