簡體   English   中英

python直方圖opencv計算每種顏色

[英]python histogram opencv calculate each colour

您好我正在嘗試計算每個R / G / B的像素並創建某些圖片的直方圖,直方圖看起來不錯,但我無法計算每種顏色的像素。 它說每種顏色相同的數量,我懷疑是正確的。

這是我的代碼,我對它還很陌生,我的想法用光了

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('photo.jpg')
color = ('b','g','r')


qtdBlue = 0
qtdGreen = 0
qtdRed = 0
totalPixels = 0


for i,col in enumerate(color):
    histr = cv.calcHist([img],[i],None,[256],[0,256])
    plt.plot(histr,color = col)
    plt.xlim([0, 256])


    totalPixels+=sum(histr)
    if i==0:
        qtdBlue = sum(histr)
    elif i==1:
        qtdGreen = sum(histr)
    elif i==2:
        qtdRed = sum(histr)


print("Red Quantity")
print(qtdRed)

print("Blue Quantity")
print(qtdBlue)

print("Green Quantity")
print(qtdGreen)

plt.show()

如果我對您的理解正確,則希望提取每種顏色對圖像的貢獻。 這就是使用matplotlib的方式。 如代碼結尾所示,每種顏色的形狀(像素數)相同。

import numpy as np
import matplotlib.pyplot as plt

# Load the image
img = plt.imread('C:\Documents\Roses.jpg')

# Extract each colour channel
red, green, blue = img[:,:,0], img[:,:,1], img[:,:,2]

# Total red+green+blue intensity
intensity = img.sum(axis=2)

# Function to calculate proportion of a certain channel
def colour_frac(color):
    return np.sum(color)/np.sum(intensity)

# Calculate the proportion of each colour
red_fraction = colour_frac(red)
green_fraction = colour_frac(green)
blue_fraction = colour_frac(blue)

sum_colour_fraction = red_fraction + green_fraction + blue_fraction
print('Red fraction: {}'.format(red_fraction))
print('\nGreen fraction: {}'.format(green_fraction))
print('\nBlue fraction: {}'.format(blue_fraction))
print('\nRGB sum: {}'.format(sum_colour_fraction))
print(red.shape == green.shape == blue.shape)

# Output
Red fraction: 0.3798302547713819

Green fraction: 0.33196874775790813

Blue fraction: 0.28820099747071

RGB sum: 1.0

red.shape == green.shape == blue.shape
Out[68]: True

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

這可能不會回答您的問題,但是我將解釋為什么不同通道sum of your histograms的結果具有相同的值。 直方圖與intensity分布有關,這意味着最后的總和是相同的。

讓我們看一個更簡化的示例:一個充滿紅色像素的3x3圖像。

紅色通道的bin 255的強度計數為9 在其他兩個通道(b,g)中,強度也為9 ,但倉位為0 如您所見,直方圖比較中的計數沒有變化。

直方圖值:

b = [9, 0, 0, ..., 0]    #0 - 255
g = [9, 0, 0, ..., 0]    #0 - 255
r = [0, 0, 0, ..., 9]    #0 - 255

在此處輸入圖片說明

任何人:您可能實際上對圖像的dominant colors感興趣

暫無
暫無

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

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