【发布时间】:2013-02-22 16:14:45
【问题描述】:
我有这个任务来交换图像中的颜色。
将红色变为蓝色 将蓝色更改为绿色 并将绿色变为红色
用户将输入图像,输出将显示带有互换颜色的图像。
我得到了将 RGB 转换为 HSI 的提示。但仍然......我不知道该怎么做。 我应该采取哪些步骤才能使这项任务成为可能?下面是RGB转HSI的公式 谢谢。 :)
将 RGB 值转换为 HSI 值的方程式 假设 R、G 和 B 是一种颜色的红色、绿色和蓝色值。恒指强度由方程给出
I = (R + G + B)/3.
现在设 m 为 R、G 和 B 中的最小值。颜色的 HSI 饱和度值由等式给出
S = 1 - m/I if I > 0, or
S = 0 if I = 0.
要将颜色的整体色调 H 转换为角度度量,请使用以下等式:
H = cos-1[ (R - ½G - ½B)/√R² + G² + B² - RG - RB - GB ] if G ≥ B, or
H = 360 - cos-1[ (R - ½G - ½B)/√R² + G² + B² - RG - RB - GB ] if B > G,
反余弦输出以度为单位。
【问题讨论】:
-
如果可能的话,我会将原始图像作为 RGB 位图加载到内存中,在内存中创建另一个位图并按照说明复制/交换 RGB 值。然后保存和/或显示新图像。但我可能过于从字面上理解了你问题的前三行。 (我有一个功能可以将屏幕图像转换为可打印的图像,该图像可以交换黑/白(屏幕上的黑色 BG)以及其他几种颜色。)
-
我猜您需要保留颜色的原始强度,否则从 RGB 转换为 HSI 没有多大意义。也许你应该在你的问题中澄清这一点。
-
嗯...是的,我猜恒指转换是一个错误的提示。我尝试交换 RGB 的值。但它只是给了我一个黑白图像。我已经用完了用于交换 RGB 值并生成具有交换颜色而不是 BW 图像的彩色输出的函数。
-
@Steve Valliere(我有一个功能可以将屏幕图像转换为可打印的图像,可以交换黑/白(屏幕上的黑色 BG)以及其他几种颜色。) - 那是什么功能?