1

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

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

4

3 回答 3

1

通常系统处理 RGB 中的图像 - 如果您要转换为 HSV 以在 HSV 空间中进行一些处理,那么您想要做的是将像素转换为 HSV,进行处理,转换回 RGB 并保存最终的 RGB 值.

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

于 2009-11-06T22:18:17.660 回答
1

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

于 2009-11-07T15:06:01.937 回答
0

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

如果您想将 HSV 值存储在图像文件中并能够将其显示为这些通道的“映射”,您可能可以将其视为将 HSV 值映射到 RGB 间隔。RGB 值分别在 0-255 范围内,而在 HSV 中,色调在 0 - 360 之间,S 和 V 在 0.0 - 0.1 之间。这意味着您可以通过将 S 和 V 值乘以 255 将它们存储在 G 和 B 中:

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

至于H值,你必须将它映射到0-255空间,所以你乘以(255 / 360)并将它存储在R分量中。就这样,最后一段:

R = H * 255 / 360;
于 2009-11-06T22:25:59.660 回答