opencv HSV图像不同于rgb图像

plicqrtu  于 2023-01-26  发布在  其他
关注(0)|答案(2)|浏览(188)

函数cv2.cvtColor(img, cv2.COLOR_RGB2HSV)将RGB图像转换为HSV图像。
当我保存此图像并使用图像查看器打开它时,为什么它在视觉上与RGB图像不同?

三原色

单纯疱疹病毒

z31licg0

z31licg01#

opencv在imwrite和imshow中假设BGR图像,并将处理任何3通道材质,就像它是BGR一样。因此,当我们保存或显示图像时,它将HSV矩阵处理为BGR。现在,对于查看器,我们的眼睛习惯于将像素识别为RGB,因此将H通道解释为红色,S通道解释为绿色,V通道解释为蓝色。Micka在评论中对此进行了漂亮的解释。

1szpjjfi

1szpjjfi2#

我自己也终于明白了!!
下面是解释:
假设我有一个图像,每个像素都是相同的,格式为**[255,0,0],这意味着这个图像是完全蓝色的。
BGR Blue Image
现在,如果使用OpenCV将BGR转换为HSV(在后台运行公式将每个像素从BGR转换为HSV),则每个像素的值将更改为
[120,255,255],表示色调= 120,饱和度= 255,值= 255。**
HSV IMAGE

**[120,255,255]**的图像在我们的屏幕上看起来有点黄,因为像素本身可以在BGR格式下工作!因此对于像素来说,蓝色= 120,绿色= 255,红色= 255。

BGR version of HSV image
所以我做了一个BGR图像,每个像素值都是**[120,255,255]**,它看起来和HSV图像一样!我也发布了像素值的图像。
Pixel Values

import numpy as np
import matplotlib.pyplot as plt
import cv2 #opencv

# Make a Black image
img = np.zeros((512,512,3), np.uint8)

# Make All pixels with Blue value to its highest (make blue image)
img[:,:,0] = 255

# Convert BGR to HSV image
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

cv2.imshow("BGR Blue Image", img)
cv2.imshow("HSV version of Blue Image",hsv_img)

print("\n BGR pixel value: ", img[5,5]) # output is [255,0,0]
print("\n HSV pixel value: ", hsv_img[5,5]) # output is [120,255,255]

cv2.waitKey(0)

# Now make the original image to the same pixel value as HSV output
img[:,:,0] = 120
img[:,:,1] = 255
img[:,:,2] = 255

cv2.imshow("BGR version of the HSV pixel value Image", img)

print("\n BGR pixel Value of the HSV image: ", img[5,5])
print("\n")

cv2.waitKey(0)

cv2.destroyAllWindows()

相关问题