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

article/2025/8/26 19:40:11


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

方案一:(参考网上代码,感觉实用性不是很强)使用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)、可见使用白色分量过滤背景后,出现车辆的轮廓,因此,能够计算白色区域的面积,最大的则为该物体颜色





http://chatgpt.dhexx.cn/article/2rto5GLA.shtml

相关文章

【Python 之HSV颜色识别】

Python 之HSV颜色识别 前言一、HSV颜色模型二、黄色识别三、使用步骤1.引入库2.处理图片3.识别结果 总结 前言 汽车自动驾驶,需要颜色识别,如黄色/红色车道线,蓝色车牌。 本文从HSV颜色模型出发,提供一种识别黄色车道线的方法供参…

OpenCV识别图像中的颜色

OpenCV识别图像中的颜色 利用OpenCV识别图像中区域的颜色 效果如图所示: 代码中需要读取的图像RGB对照表: 代码中所需读取的BGR对照表在此下载:图像RBG对照表 import cv2 import pandas as pdimg_path "./rgb_pic/color.jpg" i…

openCV python 颜色识别

图像识别 这个代码的功能是根据摄像头输入的图像,识别红色块,绿色块的坐标,并返回红绿色块的中心点的图像坐标(单位为像素) 当然,识别色可以自己更改,如蓝色,白色,黑色…

K210视觉体验—颜色识别

K210视觉体验—颜色识别 使用设备ZTFR开发板 颜色识别Lab 颜色空间构造函数示例代码1:识别RGB(红,绿,蓝)示例代码2:识别指定颜色 使用设备 ZTFR开发板 颜色识别 MaixPy 集成了 RGB565 颜色块识别 find_blo…

Halcon 学习笔记八:颜色识别

Halcon 学习笔记八:颜色识别 一、图像处理需要的知识二、图像处理的预处理和分割过程二、颜色识别的方法三、例子一四、例子二五、例子三 一、图像处理需要的知识 1.图像处理基础(rgb(hsv),gray) 2.图像灰度变换(scale_img) 3.图像基础(emph…

基于Python的颜色识别器

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 在这篇文章中,我们将展示如何使用Python构建颜色识别器。此过程也称为“颜色检测”。我们将创建一个基本应用程序,该应用程序将帮助我们检测图像…

python颜色识别demo

一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。 H: 0 — 180 S: 0 — 255 V: 0 — 255 此处把部分…

openCV-python实现颜色识别

本文将介绍使用OpenCV实现颜色识别的详细步骤 代码。 背景介绍 在截取出模板匹配到的logo区域之后,需要判断logo是什么颜色。本案例中要识别的对象是纯色的所以适用下面的颜色识别方法,有不同需求的请斟酌借鉴。 原理介绍 数字图像处理中常用的采用模型…

python颜色识别,46行代码实现865种颜色识别,看过的都说顶呱呱!

1.先介绍我做的颜色识别的功能,简单的说,就是该脚本可以打开图片,在图片上点击某个区域,可以识别某个区域的颜色,颜色识别准确度很高,很多时候颜色识别是辅助物体的颜色识别,但这个代码你们可以…

OpenCV(Python)颜色识别(一)

1. 基本原理 1.1 彩色模型 数字图像处理中常用的采用模型是RGB(红,绿,蓝)模型和HSV(色调,饱和度,亮度),RGB广泛应用于彩色监视器和彩色视频摄像机,我们平时…

OpenCV颜色识别

彩色模型 数字图像处理中常用的采用模型是RGB(红,绿,蓝)模型和HSV(色调,饱和度,亮度),RGB广泛应用于彩色监视器和彩色视频摄像机,我们平时的图片一般都是RGB…

LabVIEW色彩匹配实现颜色识别、颜色检验(基础篇—13)

目录 1、颜色识别 2、颜色检验 色彩匹配(Color Matching)是将模板图像与待测图像或其中某一区域的颜色进行比较,判断它们是否相同或相近的过程。它可以用于颜色识别、颜色检验以及彩色对象定位等基于色彩信息比较的应用程序。 色彩匹配通常…

Python 对图片进行颜色识别

场景:在进行压力测试时,需要判断图片的某一块区域是否是黑色 这里使用的是OpenCV库对图片进行颜色的识别,几乎可以识别所有常见的颜色 直接上代码 import cv2 import numpy as np import collectionsclass colorList:def getColorList(sel…

OpenCV颜色识别(所有颜色均可识别)

OpenCV颜色识别实例(所有颜色均可识别) 欢迎访问我的博客sakuraの绘梨衣 本文中的颜色识别为红色,颜色阈值设置如下: lower_apple np.array([0, 100, 100]) higher_apple np.array([10, 200, 200])识别其他颜色可以参考HSV颜色…

如何实现视觉识别颜色

1. 功能说明 通过摄像头识别特定颜色(红、绿、蓝)。摄像头采集图像信息并通过WiFi将信息传递给PC端,然后PC端根据比例判断出目标颜色在色盘上的所属颜色后,指针便会指向对应颜色。 红、绿、蓝-色块 2. 电子硬件 本实验中采用了以下…

Halcon——颜色识别提取

文章目录 前言一、颜色识别原理二、颜色识别为什么将其转换至HSV颜色空间三、源代码写在最后 前言 【Halcon】颜色识别提取 这里以嘉庚建筑风格为例~ 一、颜色识别原理 载入图像后,将其转换至HSV颜色空间,通过判断每个像素是否在所选取的范围内&…

颜色识别、轮廓识别-树莓派 Opencv-基于Python学习记录DAY-4

学习颜色识别之前先介绍一下新认识的图像格式HSV: 色调H 用角度度量,取值范围为0~360,从红色开始按逆时针方向计算,红色为0,绿色为120,蓝色为240。它们的补色是:黄色为60,青色为18…

opencv--颜色识别

目录 一、主要函数介绍 二、颜色识别 三、其他相关函数介绍 1. cv2.resize 2. np.array(x,dtype) 3. cv2.inRange() 4. cv2.imshow() 5.cv2. waitKey() 四、掩膜 一、主要函数介绍 通常,相机在RGB颜色模式下工作,但这种模式受到光线的影响较大&am…

颜色识别OpenCV

下面有多种颜色识别方法,可根据需要进行选择 ①colorList.py(颜色库) import numpy as np import collectionsdef getColorList():dict collections.defaultdict(list)# blacklower_black np.array([0, 0, 0])upper_black np.array([180…

SPSSAU统计分析软件,一键输出三线表格式分析结果

SPSSAU最近和一位朋友聊天,她在写论文,说到自己用SPSS软件对问卷数据做统计分析,做完之后分析结果有了,拿给导师看,但她们导师说,论文中的表格必须是三线表格式,然后她就得要自己手动制作三线表…