使用直方图的图像python opencv中的颜色百分比

Maj*_* ـG 4 python opencv image-processing histogram

我是python和图像处理的初学者.我想使用直方图函数从图像中找到棕色的百分比.

我做了直方图功能,但我不知道如何找到图像中棕色的百分比.

这是我的python代码

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

img = cv2.imread('C:\Users\MainUser\Desktop\histogram\dates.jpg', -1)
cv2.imshow('GoldenGate',img)

color = ('b','g','r')
for channel,col in enumerate(color):
    histr = cv2.calcHist([img],[channel],None,[256],[0,256])
    plt.plot(histr,color = col)
    plt.xlim([0,256])
plt.title('Histogram for color scale picture')
plt.show()

while True:
    k = cv2.waitKey(0) & 0xFF     
    if k == 27: break             # ESC key to exit 
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

我使用的图像

我使用的图像

我有这个代码的输出 在此输入图像描述

mme*_*ing 5

import numpy as np
import cv2

img = cv2.imread('J9MbW.jpg')

brown = [145, 80, 40]  # RGB
diff = 20
boundaries = [([brown[2]-diff, brown[1]-diff, brown[0]-diff],
               [brown[2]+diff, brown[1]+diff, brown[0]+diff])]
# in order BGR as opencv represents images as numpy arrays in reverse order

for (lower, upper) in boundaries:
    lower = np.array(lower, dtype=np.uint8)
    upper = np.array(upper, dtype=np.uint8)
    mask = cv2.inRange(img, lower, upper)
    output = cv2.bitwise_and(img, img, mask=mask)

    ratio_brown = cv2.countNonZero(mask)/(img.size/3)
    print('brown pixel percentage:', np.round(ratio_brown*100, 2))

    cv2.imshow("images", np.hstack([img, output]))
    cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)

这应该适合你.但请注意,它高度依赖于您的RGB棕色值以及您所需的公差(diff).

如果您对上述代码的详细信息有任何疑问,请随时提出.