【发布时间】:2021-04-20 19:32:15
【问题描述】:
我正在尝试提出一种算法,通过使用 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) 这样的颜色会被视为绿色。理想情况下,我希望通过某种方式对颜色的“绿色”进行排名。
我将非常感谢任何可以提供更好百分比的图像绿色百分比的算法建议。也欢迎任何关于我当前的算法更好或如何改进它们的建议。
【问题讨论】:
-
一种颜色的“绿色”可以由
g / (r + b)之类的东西确定;假设其他两种原色中的更多使颜色看起来不那么绿色。然后只需确定一些阈值来决定一种颜色是否足够绿。 -
“理想情况下,我希望通过某种方式对颜色的“绿色”进行排名。”这实际上是一个颜色理论问题,而不是编程问题。您可能想从这里开始:en.wikipedia.org/wiki/Colorimetry
标签: python image-processing python-imaging-library