RGB 到 V(从 HSV)

RGB to V (from HSV)

我正在尝试将 RGB 图像转换为其值组件。我不能使用 RGB2HSV 函数,因为我被指示在没有它的情况下转换它。 如果我没记错的话,图像的值是像素中 R、G 和 B 分量的最大值;所以这就是我试图实现的。

'''

    rgb_copy = self.rgb.copy()

    width, height, other = rgb_copy.shape
    for i in range(0, width-1):
        for j in range(0, height-1):
            # normalize the rgb values
            [r, g, b] = self.rgb[i, j]
            r_norm = r/255.0
            g_norm = g/255.0
            b_norm = b/255.0

            # find the maximum of the three values
            max_value = max(r_norm, g_norm, b_norm)

            rgb_copy[i, j] = (max_value, max_value, max_value)

    cv2.imshow('Value', rgb_copy)
    cv2.waitKey()

'''

不幸的是,这似乎不起作用。它 returns 只是一个黑色图像,当我使用内置函数转换它时,它与值组件不同。

谁能帮忙看看我哪里做错了?

详细说明我上面的评论:

因为您试图通过除以 255 来标准化 RGB 值,所以我假设您的 RGB 图像是一个 3 通道的无符号字符图像(每个通道都是一个介于 0..255 之间的无符号字符值)。

当您克隆它时:

rgb_copy = self.rgb.copy()

您制作 rgb_copy 相同类型的图像(即 3 通道无符号字符)。 然后您尝试用每个通道的标准化 0..1 浮点值填充它。 相反,您可以简单地放置每个像素的 RGB 通道的最大值。

类似于:

rgb_copy = self.rgb.copy()
width, height, other = rgb_copy.shape
for i in range(0, width - 1):
    for j in range(0, height - 1):
        # find the maximum of the three values
        max_value = max(self.rgb[i, j])
        rgb_copy[i, j] = (max_value, max_value, max_value)

cv2.imshow('Value', rgb_copy)
cv2.waitKey()