我写了一个程序来识别文件中的颜色,并打印出给定颜色的名称,文件的颜色与之具有最高的相似性。我使用HSV来获取颜色范围,并将HSV与此范围进行比较以获得最相似的颜色。我试图迭代颜色字典以将它们与我传递的文件的HSV进行比较。然而,它不起作用并显示任何错误。
from pickletools import uint8
import cv2
from matplotlib import image
import numpy as np
#HSV Hue - color, Saturation - color density, Value - brightness of color.
#use lower and upper value of a color to define range where picture will fit.
#opencv's HSV values are H(0-179)S(0-255)V(0-255)
img = cv2.imread('purple.jpg', cv2.COLOR_BGR2HSV)
#colors
color_list= {
"white":([0,0,50],[0,0,255]),
"black":([0,0,0],[0,0,49]),
"red":([0,0,225],[127,0,255]),
"green":([40,40,40],[70,255,255]),
"yellow":([23,41,223],[40,150,255]),
"blue":([78,158,124],[138,255,255])
}
#get image
img = cv2.imread('purple.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
for color_name, (lower, upper) in color_list.items():
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)
if mask.any():
print(f"{color_name} :{mask.sum}")
2条答案
按热度按时间ntjbwcob1#
您的想法是正确的,但是您需要找到每个颜色范围的白色像素数,而不是对
mask
中的像素求和这里有一个简单的方法。
mask
mask
是一个二进制图像(白色图像),其值为0
(黑色)和255
(白色)。白色像素表示它包含指定范围内的颜色。mask
中存在的白色像素的数量。如果图像的范围具有最多的白色像素,则图像具有相应的颜色。附加码:
wz1wpwve2#
你需要调用
cv2.cvtColor()
方法,如下所示: