【问题标题】:Getting the percentage of a color in an image using OpenCV and Python使用 OpenCV 和 Python 获取图像中颜色的百分比
【发布时间】:2020-05-12 01:37:42
【问题描述】:

所以我有这个 python 脚本,可以检测并打印图像中的一系列 HSV 颜色,但我想向它添加另一个功能。

它希望它能够打印该颜色的百分比。

我的脚本:

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


img = cv2.imread('C:/Users/Vishu Rana/Documents/PY/test_cases/image.jpg')


grid_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.figure(figsize=(20,8))
plt.imshow(grid_RGB) # Printing the original picture after converting to RGB


grid_HSV = cv2.cvtColor(grid_RGB, cv2.COLOR_RGB2HSV) # Converting to HSV
lower_green = np.array([25,52,72])
upper_green = np.array([102,255,255])

mask= cv2.inRange(grid_HSV, lower_green, upper_green)
res = cv2.bitwise_and(img, img, mask=mask) # Generating image with the green part

print("Green Part of Image")
plt.figure(figsize=(20,8))
plt.imshow(res)

我需要在此代码中添加什么以使其也打印绿色的百分比。

【问题讨论】:

  • 蒙版中绿色像素的百分比?类似:np.sum(mask) / np.size(mask).
  • @Benjamin 将返回原始图像中绿色像素的百分比。
  • 我认为它是一个二进制/布尔掩码。但你知道他们怎么说假设......

标签: python numpy opencv colors


【解决方案1】:

OpenCV 数组创建使用值 255 的掩码。获取绿色百分比的简单方法是在生成掩码后执行以下代码。

    green_perc = (mask>0).mean()

有人询问了有关此方法为何有效的更全面的解释。当 OpenCV 创建掩码时,它将创建一个值为 0 和值为 255 的二维数组。在这个问题的上下文中,值 255 是掩码中指示图片为绿色的部分。

(mask>0).mean() 起作用的原因是因为我们只有 255 和 0 的值。Mask > 0 将为我们的掩码中的每个值创建一个 True/False 布尔数组。

True 值表示数组的部分是绿色的,False 值表示它不是绿色的。取这个布尔数组的平均值将为我们提供绿色数组的百分比。 (当取布尔数组的平均值时,True 将取 1 的值,False 将取 0 的值)。

获得相同结果的另一种方法是实现这样的代码。

green_perc = (mask==255).mean()

上面的评论还提到了np.sum(mask)/np.size(mask)的解决方案。这不能正常工作,因为 OpenCV 使用值 255。您可以通过将此值除以 255 来调整它以获得相同的百分比。

green_perc = (np.sum(mask) / np.size(mask))/255

【讨论】:

  • 上面的评论给出了 10.155619855967078 而你的解决方案给出了 0.03982596021947874。
  • @VishuRana 注释错误,百分比不能高于 1.0,注释中的代码将 255 的值相加,而不是每个像素相加 1。因此结果错误。
  • @VishuRana 我不知道,你有图像。您计算的蒙版中图像是否有 3.98% 的绿色?答案中的计算似乎正确,但我不知道您如何应用它们。
  • @VishuaRana 由于 OpenCV 数组使用 255 作为掩码,因此求和和除以大小会给您一个过高的数字。这就是为什么我要寻找数组> 0的位置。如果你从评论中得到的数字除以 255,你也应该得到我给出的解决方案。
  • @lenik 我正在链接图像。你也可以确认link。我觉得是对的
猜你喜欢
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 2020-05-29
  • 2014-02-23
  • 2017-07-23
  • 1970-01-01
相关资源
最近更新 更多