【更新】主要提供两种方案:
方案一:(参考网上代码,感觉实用性不是很强)使用PIL截取图像,然后将RGB转为HSV进行判断,统计判断颜色,最后输出RGB值
方案二:使用opencv库函数进行处理。(效果不错)
1、将图片颜色转为hsv,
2、使用cv2.inRange()函数进行背景颜色过滤
3、将过滤后的颜色进行二值化处理
4、进行形态学腐蚀膨胀,cv2.dilate()
5、统计白色区域面积
详解:方案一:
项目实际需要,对识别出来的车车需要标记颜色,因此采用方案如下:
1、通过import PIL.ImageGrab as ImageGrab 将识别出来的汽车矩形框裁剪出来
img_color=image.crop((left,right,top,bottom))
2、将裁剪出来的image进行颜色图像识别
RGB和hsv中间的转换关系,网上很多,我也没有具体去研究如何转换的,能用就行
附上测试,封装成函数方法:
import colorsys
import PIL.Image as Image
def get_dominant_color(image):
max_score = 0.0001
dominant_color = None
for count,(r,g,b) in image.getcolors(image.size[0]*image.size[1]):
# 转为HSV标准
saturation = colorsys.rgb_to_hsv(r/255.0, g/255.0, b/255.0)[1]
y = min(abs(r*2104+g*4130+b*802+4096+131072)>>13,235)
y = (y-16.0)/(235-16)
#忽略高亮色
if y > 0.9:
continue
score = (saturation+0.1)*count
if score > max_score:
max_score = score
dominant_color = (r,g,b)
return dominant_color
if __name__ == '__main__':
image = Image.open('test.jpg')
image &