如何在python中使用PIL读取图像的HSV值?

g2ieeal7  于 2022-12-28  发布在  Python
关注(0)|答案(1)|浏览(362)

我正在尝试获取图像中所有像素的HSV值。我用一个普通的洋红色图像测试了下面的代码,我得到的值与从在线转换器得到的值有很大的不同。我意识到的另一件事是,结果数组中没有一个值超过255(洋红色的H值约为300)

`from PIL import Image

infile = 'magenta.jpg'
saturation = 0

img = Image.open(infile)
width, height = img.size
img_hsv = img.convert('HSV')

for x in range(width-1):
   for y in range(height-1):
      hsv = img_hsv.getpixel((x,y))
      print(hsv)`
s5a0g9ez

s5a0g9ez1#

将“R”值乘以360/255,“G”值乘以100/255,“B”值乘以100/255,得到相应的“H”、“S”和“V”值。此外,在处理实际图像时,我发现使用方法image.getdata()更容易、更有效,而不是循环遍历每个x和y值并使用image.getpixel(xy):

from PIL import Image

infile = 'example.jpg'

img = Image.open(infile, 'r')
img_hsv = img.convert('HSV')
pixel_array = list(img_hsv.getdata())

hsv_pixel_array = []
for pixel in pixel_array:
    hsv_pixel_array.append(round((pixel[0]*(360/255), 1), round(pixel[1]*(100/255)), round(pixel[2]*(100/255))))

print(hsv_pixel_array)

相关问题