【更新】主要提供两种方案:

方案一:(参考网上代码,感觉实用性不是很强)使用PIL截取图像,然后将RGB转为HSV进行判断,统计判断颜色,最后输出RGB值

方案二:使用opencv库函数进行处理。(效果不错)

1、将图片颜色转为hsv,
       2、使用cv2.inRange()函数进行背景颜色过滤
 3、将过滤后的颜色进行二值化处理
 4、进行形态学腐蚀膨胀,cv2.dilate()
 5、统计白色区域面积

详解:方案一:

转载出处:http://www.jb51.net/article/62526.htm

项目实际需要,对识别出来的车车需要标记颜色,因此采用方案如下:

1、通过import PIL.ImageGrab as ImageGrab 将识别出来的汽车矩形框裁剪出来

  img_color=image.crop((left,right,top,bottom))

2、将裁剪出来的image进行颜色图像识别

RGB和hsv中间的转换关系,网上很多,我也没有具体去研究如何转换的,能用就行

附上测试,封装成函数方法:

import colorsys
import PIL.Image as Imagedef get_dominant_color(image):max_score = 0.0001dominant_color = Nonefor 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:continuescore = (saturation+0.1)*countif score > max_score:max_score = scoredominant_color = (r,g,b)return dominant_colorif __name__ == '__main__':image = Image.open('test.jpg')image = image.convert('RGB')print(get_dominant_color(image))

测试图

结果

在这个网上查询RGB数值对应的颜色

http://www.sioe.cn/yingyong/yanse-rgb-16/

方案二:opencv计算机视觉库函数处理

1、定义HSV颜色字典,参考网上HSV颜色分类


代码如下:

import numpy as np
import collections#定义字典存放颜色分量上下限
#例如:{颜色: [min分量, max分量]}
#{'red': [array([160,  43,  46]), array([179, 255, 255])]}def getColorList():dict = collections.defaultdict(list)# 黑色lower_black = np.array([0, 0, 0])upper_black = np.array([180, 255, 46])color_list = []color_list.append(lower_black)color_list.append(upper_black)dict['black'] = color_list# #灰色# lower_gray = np.array([0, 0, 46])# upper_gray = np.array([180, 43, 220])# color_list = []# color_list.append(lower_gray)# color_list.append(upper_gray)# dict['gray']=color_list# 白色lower_white = np.array([0, 0, 221])upper_white = np.array([180, 30, 255])color_list = []color_list.append(lower_white)color_list.append(upper_white)dict['white'] = color_list#红色lower_red = np.array([156, 43, 46])upper_red = np.array([180, 255, 255])color_list = []color_list.append(lower_red)color_list.append(upper_red)dict['red']=color_list# 红色2lower_red = np.array([0, 43, 46])upper_red = np.array([10, 255, 255])color_list = []color_list.append(lower_red)color_list.append(upper_red)dict['red2'] = color_list#橙色lower_orange = np.array([11, 43, 46])upper_orange = np.array([25, 255, 255])color_list = []color_list.append(lower_orange)color_list.append(upper_orange)dict['orange'] = color_list#黄色lower_yellow = np.array([26, 43, 46])upper_yellow = np.array([34, 255, 255])color_list = []color_list.append(lower_yellow)color_list.append(upper_yellow)dict['yellow'] = color_list#绿色lower_green = np.array([35, 43, 46])upper_green = np.array([77, 255, 255])color_list = []color_list.append(lower_green)color_list.append(upper_green)dict['green'] = color_list#青色lower_cyan = np.array([78, 43, 46])upper_cyan = np.array([99, 255, 255])color_list = []color_list.append(lower_cyan)color_list.append(upper_cyan)dict['cyan'] = color_list#蓝色lower_blue = np.array([100, 43, 46])upper_blue = np.array([124, 255, 255])color_list = []color_list.append(lower_blue)color_list.append(upper_blue)dict['blue'] = color_list# 紫色lower_purple = np.array([125, 43, 46])upper_purple = np.array([155, 255, 255])color_list = []color_list.append(lower_purple)color_list.append(upper_purple)dict['purple'] = color_listreturn dictif __name__ == '__main__':color_dict = getColorList()print(color_dict)num = len(color_dict)print('num=',num)for d in color_dict:print('key=',d)print('value=',color_dict[d][1])

2、颜色识别

import  cv2
import numpy as np
import colorListfilename='car04.jpg'#处理图片
def get_color(frame):print('go in get_color')hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)maxsum = -100color = Nonecolor_dict = colorList.getColorList()for d in color_dict:mask = cv2.inRange(hsv,color_dict[d][0],color_dict[d][1])cv2.imwrite(d+'.jpg',mask)binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]binary = cv2.dilate(binary,None,iterations=2)img, cnts, hiera = cv2.findContours(binary.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)sum = 0for c in cnts:sum+=cv2.contourArea(c)if sum > maxsum :maxsum = sumcolor = dreturn colorif __name__ == '__main__':frame = cv2.imread(filename)print(get_color(frame))

3、结果

原始图像(网上找的测试图):

1)、使用cv2.inRange()函数过滤背景后图片如下:


2)、可见使用白色分量过滤背景后,出现车辆的轮廓,因此,能够计算白色区域的面积,最大的则为该物体颜色

Python3识别判断图片主要颜色并和颜色库进行对比的方法相关推荐

  1. python颜色识别_浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法

    [更新]主要提供两种方案: 方案一:(参考网上代码,感觉实用性不是很强)使用PIL截取图像,然后将RGB转为HSV进行判断,统计判断颜色,最后输出RGB值 方案二:使用opencv库函数进行处理.(效 ...

  2. C# 判断图片是CMYK模式还是RGB模式最简单的方法

    C#判断图片是CMYK模式还是RGB模式最简单的方法: Image img = Bitmap.FromFile("图片路径", true); PixelFormat pf = (P ...

  3. python查看图片颜色统计_Python通过PIL获取图片主要颜色并和颜色库进行对比的方法...

    本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法.分享给大家供大家参考.具体分析如下: 这段代码主要用来从图片提取其主要颜色,类似Goolge和Baidu的图片搜索时可以指 ...

  4. java判断图片相同_java 识别图片相似度及图片是否相同

    1.比较MD5值 判断图片是否相同 package com.zerdoor.util; import java.io.File; import java.io.FileInputStream; imp ...

  5. Python3识别图片文字

    Python3识别图片文字 一.Pillow, pytesseract库的安装(Python 3.5) PIL全称:Python Imaging Library,python图像处理库,这个库支持多种 ...

  6. python3识别图中的文字_Python3.x:如何识别图片上的文字

    Python3.x:如何识别图片上的文字 安装pytesseract库,必须先安装其依赖的PIL及tesseract-ocr,其中PIL为图像处理库,而后面的tesseract-ocr则为google ...

  7. matlab判断图片颜色计算像素值

    使用matlab对图像进行主体颜色判断 欢迎您的到来! 今天学习了利用matlab对一张图片的颜色主体进行判断并输出颜色 程序要求 从文件读取图片 调用函数裁剪出要判断的图片中小灯的颜色 具体步骤 一 ...

  8. php 识别图片主色调,PHP 判断图片主色调的简单示例

    这篇文章主要为大家详细介绍了PHP 判断图片主色调的简单示例,具有一定的参考价值,可以用来参考一下. 这段代码可以帮助你判断任意图片的主色调,使用了简单的统计算法实现 ,感兴趣的小伙伴,下面一起跟随5 ...

  9. 利用python进行识别相似图片(二)

    前言 和网上各种首先你要有一个女朋友的系列一样,想进行人脸判断,首先要有脸, 只要能靠确定人脸的位置,那么进行两张人脸是否相似的操作便迎刃而解了. 所以本篇文章着重讲述如何利用openCV定位人脸. ...

最新文章

  1. [JAVA EE] JPA 技术实践:完成增、删、改、查操作
  2. 前端怎么使用jsessionid_成都Web前端是干什么的?新手怎么入门
  3. Android JNI(Java Native Interface)技术介绍
  4. 关于pagehelper分页
  5. 移植 uC/OS-III 到 STM32
  6. java 反射 获取成员_java 反射获取成员
  7. git创建仓库,并提交代码(第一次创建并提交)(转)
  8. MFC应用程序框架分析
  9. 【分布式】缓存穿透、缓存雪崩,缓存击穿解决方案
  10. apicloud mysql 登录_PHP+MySQL实现前台的登陆注册。
  11. 四十五.加密与解密 AIDE入侵检测系统 扫描与抓包
  12. Android addr2line 工具使用
  13. 使用 Charles 对 Android 设备进行 Https 抓包
  14. python表格绘制斜线表头_Java中使用POI在Excel单元格中画斜线—XLSX格式
  15. 时间序列分析 | 相似性度量基本方法
  16. 沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第七章 GTP的IP核配置
  17. 理工附中2021年高考成绩查询,2021年江苏理工学院录取结果查询,附查询网址入口...
  18. 数字图像处理:图像几何变换(Matlab实现几何变换+原理解析
  19. skb_buff 详解(二)
  20. 申请软著需要什么材料,多长时间下证?

热门文章

  1. 2022届毕业生面经总结,目前已拿到阿里+微软双offer,希望大家给点建议!
  2. 计算机的基础操作知识试题,计算机操作基础知识试题(220道)
  3. MeshLab 2022.02 源码编译教程
  4. 大河奔流的精神 ——俞敏洪
  5. 【Linux】循序渐进学运维-tomcat配置文件详解
  6. 使用计算机求函数极限示例
  7. str.charAt(0);
  8. charAt()-‘0‘
  9. Selenium UnreachableBrowserException异常处理方案
  10. 【综合类型第 10 篇】什么是时间戳