gpt4 book ai didi

python - 估计图像中绿色的百分比

转载 作者:行者123 更新时间:2023-12-01 00:51:07 26 4
gpt4 key购买 nike

我正在尝试提出一种算法,通过使用 PIL 迭代像素来为图像所包含的绿色量打分。到目前为止,我已经想出了几种不同的方法,但它们似乎都有缺陷。

第一个将 rgb 中 g 的所有值相加,然后除以所有 3 种颜色的总和。

def percent_green(img_file):
red = 0
green = 0
blue = 0

img = Image.open(img_file)
pixels = img.load()
width, height = img.size
for x in range(width):
for y in range(height):
rgb = pixels[x, y]
red += rgb[0]
green += rgb[1]
blue += rgb[2]

percent = green / (red + blue + green)
return percent * 100

此方法成功地根据图像的绿色程度对图像进行排名,但仅由 rgb(100, 200, 100) 组成的图像尽管非常绿色,但只能得分 50%。

我想到的另一种方法是简单地确定绿色比红色或蓝色更多的像素百分比。

def percent_green(img_file):
img = Image.open(img_file)
pixels = img.load()
width, height = img.size
total_green = 0
for x in range(width):
for y in range(height):
rgb = pixels[x, y]
if rgb[1] > rgb[0] and rgb[1] > rgb[2]: #if green predominant colour
total_green += 1


percent = total_green /(width * height)
return percent * 100

此选项的问题是像 rgb(0, 1, 0) 或 rgb(244, 255, 244) 这样的颜色将被计为绿色。我理想地希望有某种方法来对颜色的“绿色”进行排名。

如果有任何算法建议可以提供更好的图像绿色程度百分比,我将非常感激。也欢迎任何关于我当前的算法更好或如何改进它们的建议。

最佳答案

一种可能的方法是在“色相饱和度和值”色彩空间 HSV colourspace 中查看图像。 。然后您可以查看色调并查看它是否对应于您要识别的绿色范围。

在链接的 HSV 色轮上,您可以看到红色的色调为 0,绿色为 120,蓝色为 240。但是,PIL 希望将这些值保存在范围为 0..255 的无符号 8 位数字中而不是 0..360,因此所有值都按 255/360 缩放。因此,在 PIL 中,红队的得分约为 0,绿队的得分约为 85,蓝队的得分约为 170。

因此,您可以使用下面的代码将所有介于 80..90 之间的像素计为绿色。请注意,在 Python 中迭代像素通常是一个非常糟糕的主意 - 它太慢了 - 所以我使用 Numpy。如果您不想使用 Numpy,只需像下面一样获取 Hue channel ,然后迭代像素,计算常规 Python 中您想要的范围内的像素:

from PIL import Image
import numpy as np

# Load image and convert to HSV
im = Image.open('bp-1.jpg').convert('HSV')

# Extract Hue channel and make Numpy array for fast processing
Hue = np.array(im.getchannel('H'))

# Make mask of zeroes in which we will set greens to 1
mask = np.zeros_like(Hue, dtype=np.uint8)

# Set all green pixels to 1
mask[(Hue>80) & (Hue<90)] = 1

# Now print percentage of green pixels
print((mask.mean()*100)

如果我在他的图像上运行它,我会得到 4%

enter image description here

而这张图片我得到了 31%

enter image description here

如果您只想计算高度饱和的颜色,您也可以提取并考虑饱和度。

关于python - 估计图像中绿色的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56569418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com