簡體   English   中英

使用 OpenCV 和 Python 獲取圖像中顏色的百分比

[英]Getting the percentage of a color in an image using OpenCV and Python

所以我有這個 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)

我需要在此代碼中添加什么才能使其也打印綠色的百分比。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM