将rgb图像转换为hsv

时间:2009-11-06 22:13:32

标签: c# image colors rgb hsv

我正在尝试将rgb图像转换为C#中的等效hsv图像。我找到了几种算法来进行转换,但在计算后无法找到如何保存图像的这些值。

例如,在计算h = 287之后,s = 0.5,v = 0.34。我应该在图像文件中将这些值保存到哪里以将其转换为等效的hsv图像?

3 个答案:

答案 0 :(得分:2)

在一般系统中处理RGB中的图像 - 如果你要转换为HSV在HSV空间中进行一些处理,那么你想要做的是将像素转换为HSV,进行处理,将BACK转换为RGB并保存最终的RGB值。

将图像从RGB转换为HSV而不改变它会恕我直言(你最终会得到完全相同的图像)。

答案 1 :(得分:2)

访问OpenCV documentation并仔细查看 cvCvtColor 功能。在那里,您将看到OpenCV中用于存储HSV值的“技巧”。例如,要存储8位图像:V得到255 * V,S得到255 * S,H得到H / 2。

答案 2 :(得分:1)

如果您对每次需要处理图像时重用HSV值感兴趣,可以编写一个包含它们的二进制文件。然而,这涉及以某种形式重复图像,但如果您有多个需要这些值的过程并且由于图像尺寸较大,则可能会有用,以避免转换步骤。但是,一般情况下,您会读取RGB值,将它们转换为HSV,处理它们,将它们转换回RGB,然后保存处理过的图像。

如果您想将HSV值存储在图像文件中并能够将其显示为这些通道的“地图”,您可以根据将HSV值映射到RGB间隔来考虑它。 RGB值各自在0-255区间内,而在HSV中,Hue在0-360中,S和V在0.0-0.1中。这意味着您可以将S和V值存储在G和B中,方法是将它们乘以255:

G = S * 255;
B = V * 255;

对于H值,必须将其映射到0 - 255空间,因此将其乘以(255/360)并将其存储在R组件中。所以它就是最后一块:

R = H * 255 / 360;