颜色识别OpenCV

article/2025/8/26 22:34:22

下面有多种颜色识别方法,可根据需要进行选择

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, 255, 46])color_list_black = []color_list_black.append(lower_black)color_list_black.append(upper_black)dict['black'] = color_list_black# graylower_gray = np.array([0, 0, 46])upper_gray = np.array([180, 43, 220])color_list_gray= []color_list_gray.append(lower_gray)color_list_gray.append(upper_gray)dict['gray'] = color_list_gray# whitelower_white = np.array([0, 0, 221])upper_white = np.array([180, 30, 255])color_list_white = []color_list_white.append(lower_white)color_list_white.append(upper_white)dict['white'] = color_list_white# redlower_red = np.array([156, 43, 46])upper_red = np.array([180, 255, 255])color_list_red = []color_list_red.append(lower_red)color_list_red.append(upper_red)dict['red'] = color_list_red# red2lower_red = np.array([0, 43, 46])upper_red = np.array([10, 255, 255])color_list_red2 = []color_list_red2.append(lower_red)color_list_red2.append(upper_red)dict['red2'] = color_list_red2# orangelower_orange = np.array([11, 43, 46])upper_orange = np.array([25, 255, 255])color_list_orange = []color_list_orange.append(lower_orange)color_list_orange.append(upper_orange)dict['orange'] = color_list_orange# yellowlower_yellow = np.array([26, 43, 46])upper_yellow = np.array([34, 255, 255])color_list_yellow = []color_list_yellow.append(lower_yellow)color_list_yellow.append(upper_yellow)dict['yellow'] = color_list_yellow# greenlower_green = np.array([35, 43, 46])upper_green = np.array([77, 255, 255])color_list_green = []color_list_green.append(lower_green)color_list_green.append(upper_green)dict['green'] = color_list_green# cyanlower_cyan = np.array([78, 43, 46])upper_cyan = np.array([99, 255, 255])color_list_cyan = []color_list_cyan.append(lower_cyan)color_list_cyan.append(upper_cyan)dict['cyan'] = color_list_cyan# bluelower_blue = np.array([100, 43, 46])upper_blue = np.array([124, 255, 255])color_list_blue = []color_list_blue.append(lower_blue)color_list_blue.append(upper_blue)dict['blue'] = color_list_blue# purplelower_purple = np.array([125, 43, 46])upper_purple = np.array([155, 255, 255])color_list_purple = []color_list_purple.append(lower_purple)color_list_purple.append(upper_purple)dict['purple'] = color_list_purplereturn 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])

xf_color.py(识别图片面积最大颜色)

import cv2
import colorListdef get_color(frame):print('go in get_color')hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)maxsum = 0color = Nonecolor_dict = colorList.getColorList()for d in color_dict:mask = cv2.inRange(hsv, color_dict[d][0], color_dict[d][1])binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]binary = cv2.dilate(binary, None, iterations=2)cnts = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]sum = 0for c in cnts:sum += cv2.contourArea(c)# print("%s  , %d" %(d, sum ))if sum > maxsum:maxsum = sumcolor = dreturn colorif __name__ == '__main__':filename = "/home/pi/color/yellow.jpg"frame = cv2.imread(filename)print(get_color(frame))

xf_realize.py(识别摄像头面积最大颜色)

import cv2
import xf_colordef videox():vix = cv2.VideoCapture(0)while True:ret, tu = vix.read()cv2.imshow("take_photo", tu)cv2.waitKey(1)cv2.imwrite("color.png", tu)filename = cv2.imread("color.png")color = xf_color.get_color(filename)if color == "red" or color == "red2":print("red")result = "1"breakelif color == "green":print("green")result = "2"breakelif color == "blue":print("blue")result = "3"breakvix.release()cv2.destroyAllWindows()return resultif __name__ == '__main__':videox()

xf_hsv.py(识别颜色并画框)

import numpy as np
import cv2font = cv2.FONT_HERSHEY_SIMPLEXlower_green = np.array([35, 43, 46])  # 绿色低阈值
upper_green = np.array([77, 255, 255])  # 绿色高阈值
lower_red = np.array([0, 127, 128])  # 红色低阈值
upper_red = np.array([10, 255, 255])  # 红色高阈值
lower_blue = np.array([100, 43, 46])  # 蓝色低阈值
upper_blue = np.array([124, 255, 255])  # 蓝色高阈值
lower_yellow = np.array([11, 43, 46])  # 黄色低阈值
upper_yellow = np.array([34, 255, 255])  # 黄色高阈值cap = cv2.VideoCapture(0)#打开USB摄像头
if (cap.isOpened()):  # 视频打开成功flag = 1
else:flag = 0
num = 0
if (flag):while (True):ret, frame = cap.read()  # 读取一帧if ret == False:  # 读取帧失败breakhsv_img = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)mask_green = cv2.inRange(hsv_img, lower_green, upper_green)  # 根据颜色范围删选mask_red = cv2.inRange(hsv_img, lower_red, upper_red)mask_blue = cv2.inRange(hsv_img, lower_blue, upper_blue)mask_yellow = cv2.inRange(hsv_img, lower_yellow, upper_yellow)mask_green = cv2.medianBlur(mask_green, 7)  # 中值滤波mask_red = cv2.medianBlur(mask_red, 7)mask_blue = cv2.medianBlur(mask_blue, 7)mask_yellow = cv2.medianBlur(mask_yellow, 7)mask = cv2.bitwise_or(mask_green, mask_red, mask_blue, mask_yellow) # 检测轮廓mask_green, contours, hierarchy = cv2.findContours(mask_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)mask_red, contours2, hierarchy2 = cv2.findContours(mask_red, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)mask_blue, contours3, hierarchy3 = cv2.findContours(mask_blue, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)mask_yellow, contours4, hierarchy4 = cv2.findContours(mask_yellow, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)for cnt in contours:(x, y, w, h) = cv2.boundingRect(cnt)cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)cv2.putText(frame, "Green", (x, y - 5), font, 0.7, (0, 255, 0), 2)for cnt2 in contours2:(x2, y2, w2, h2) = cv2.boundingRect(cnt2)cv2.rectangle(frame, (x2, y2), (x2 + w2, y2 + h2), (0, 0, 255), 2)cv2.putText(frame, "Red", (x2, y2 - 5), font, 0.7, (0, 0, 255), 2)for cnt3 in contours3:(x3, y3, w3, h3) = cv2.boundingRect(cnt3)cv2.rectangle(frame, (x3, y3), (x3 + w3, y3 + h3), (255, 0, 0), 2)cv2.putText(frame, "Blue", (x3, y3 - 5), font, 0.7, (255, 0, 0), 2)for cnt4 in contours4:(x4, y4, w4, h4) = cv2.boundingRect(cnt4)cv2.rectangle(frame, (x4, y4), (x4 + w4, y4 + h4), (0, 255, 255), 2)cv2.putText(frame, "Yellow", (x4, y4 - 5), font, 0.7, (0, 255, 255), 2)num = num + 1cv2.imshow("dection", frame)cv2.imwrite("imgs/%d.jpg"%num, frame)if cv2.waitKey(20) & 0xFF == 27:break
cv2.waitKey(0)
cv2.destroyAllWindows()

gaussian.py(利用高斯等操作进行处理后的颜色识别)

import cv2
import numpy as npcolor_dist = {'red': {'Lower': np.array([0, 127, 128]), 'Upper': np.array([10, 255, 255])},'light_red': {'Lower': np.array([178, 100, 136]), 'Upper': np.array([255, 255, 255])},'blue': {'Lower': np.array([100, 80, 46]), 'Upper': np.array([124, 255, 255])},'green': {'Lower': np.array([35, 43, 35]), 'Upper': np.array([90, 255, 255])},'yellow': {'Lower': np.array([26, 43, 46]), 'Upper': np.array([34, 255, 255])},}cap = cv2.VideoCapture(0) 
cv2.namedWindow('camera', cv2.WINDOW_AUTOSIZE)while True:ret, frame = cap.read()gs_frame = cv2.GaussianBlur(frame, (5, 5), 0) # 高斯hsv = cv2.cvtColor(gs_frame, cv2.COLOR_BGR2HSV) # HSVinRange_hsv = cv2.inRange(hsv, color_dist['green']['Lower'], color_dist['green']['Upper']) # 二值化cnts = cv2.findContours(inRange_hsv.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] # 检测轮廓c = max(cnts, key=cv2.contourArea)rect = cv2.minAreaRect(c) # 最小外接矩形box = cv2.boxPoints(rect) # 获取顶点坐标box_list = box.tolist()cv2.drawContours(frame, [np.int0(box)], -1, (0, 255, 0), 2)cv2.imshow('camera', frame)if cv2.waitKey(1) & 0xFF == 27:breakcv2.destroyAllWindows()

下面是HSV表与BGR表可根据需要修改自己的数据

HSV

HSV表

BGR

BGR表


http://chatgpt.dhexx.cn/article/wa1w4iZU.shtml

相关文章

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

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

SPSS软件的数据分析与GDP和人口老龄化的预测

目录 前言 问题二模型的建立与求解 1.2.1 ARIMA时间序列模型的建立与求解 平稳性检验 的时间序列预测模型的建立与求解 ​​​​​​​模型的检验 ​​​​​​​对于的时间序列预测模型的建立与求解 ​​​​​​​模型的检验 ​​​​​​​ 前言 SPSS软件的数据分析与GDP和…

数据分析与挖掘———SPSS Moderler

数据分析与挖掘———SPSS Moderler 一、Modeler给概述 1、SPSS Modeler基本认识 IBM SPSS Modeler是一组数据挖掘工具,通过这些工具可以采用商业技术快速建立预测性模型,并将其应用于商业活动,从而改进决策过程。 SPSS Modeler提供了各种…

用SPSS做数据分析(1)

写在前面: 爬虫今天停更一天,今天是周六,今天要把最近网课学习SPSS课程做个总结和回顾,明天继续更新爬虫的内容,今天这篇文章主要是SPSS中的数据管理,一些关于数据的简单操作,是属于SPSS中比较基础的内容,希望看完博客能动手亲自实践一下,会有奇效 文章目录 写在前面:SPSS数据…

利用SPSS做数据分析①(了解SPSS)

话不多说,上才艺,BGM,BGM,BGMBGM。。。哈哈哈哈 不闹了,接下来让我们一起认识一个非常好用的数据分析工具:SPSS 1、SPSS是什么? SPSS是广大统计爱好者和数据分析师最熟悉的名字,它…

如何用SPSS进行数据分析?

1.什么是SPSS SPSS是社会统计科学软件包的简称, 其官方全称为IBM SPSS Statistics。SPSS软件包最初由SPSS Inc.于1968年推出,于2009年被IBM收购,主要运用于各领域数据的管理和统计分析。作为世界社会科学数据分析的标准,SPSS操作…

数据分析5大软件大PK:Python、Excel、R、SAS、SPSS你最爱哪个?

转自 中国统计网 本文为转载分享,若侵权请联系后台删除 1 Excel Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件。Excel 是微软办公套装软件的一个…

SPSS:数据分析

目录 1、数据采集 2、数据是否服从正态分布 3、T检验(T Test) 4、方差分析(ANOVA) 5、卡方检验(Chi-square Test) 6、灰色关联度分析(Grey Relation Analysis,GRA)…

[SPSS] SPSS统计分析软件简介

SPSS的英文缩写来源于以下两个 ① Statistical Package for Social Science(社会科学统计软件包) ② Statistical Product and Service Solutions(统计产品与服务解决方案) SPSS是一种专业的统计分析软件。为用户提供了直观的图形化菜单界面,用户的数据管理和统计…

SPSS软件介绍

SPSS软件界面描述 IBM SPSS是目前常用的一种统计分析软件,SPSS(Statistical Product and Service Solutions)是统计产品和服务解决方案软件,操作简单,无需写代码,只需确定要分析的数据及之间的因变、自变关…

数据分析软件及spss简单操作

数据分析软件介绍 SPSS统计软件 SPSS是英文Statistical package for the social science 的缩写,翻译成汉语是社会学统计程序包,20世纪60年代末由美国斯坦福大学的三位研究生研制,1975年在芝加哥组建SPSS总部。SPSS系统特点是操作比较方…

SPSS数据分析全套教程(1)——SPSS概览

SPSS数据分析全套教程(1)——SPSS概览 什么是SPSS? 社会科学统计软件包(Statistical Package for the Social Science,SPSS)是世界著名的统计分析软件之一。 经近40年的发展,在全球已拥有大量…

初识数据分析利器SPSS

今天这篇文章小白带大家了解一款做数据分析的利器—SPSS。 不知道大家有没有了解过SPSS,如果了解过甚至使用过的同学又对这款工具有多深的认识呢? SPSS是一款常用的数据分析工具,不管是在学校课程、学术论文还是数据分析工作中都是非常常见…

JLink的RTT使用

前言:什么是RTT? RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都支持RTT。RTT既可以从MCU上输出信息、也可以向应用程序发送信息,由于其高速的特性&#…

使用RTT代替UART,把你的JLink变成串口调试助手~

摘要:不知道大家在单片机开发中是如何打印调试信息的,大多数应该是用串口调试打印吧,在大多数的情况下,一般在制板和写代码时都会预留串口1做为调试打印用。 但是在实际开发如果没有预留串口怎么办?其实我们的下载器是…

TCP RTT与TCP RTO关系详解

本文目录 1,TCP的RTT和TCP的RTO的定义1.1,什么是TCP的RTT1.2,什么是TCP的RTO 2,TCP的当前RTT和RTO的计算2.1,开始讲RTT计算算法前,我们先理解一下TCP里对RTT进行采样的流程2.2,最初始的TCP RTT和…

通过pylink给jlink-RTT添加时间戳

参考链接 目前还有一些bug,比如时间戳有时候会加在一行log的中间,有时候又会少一些时间戳,但是log目前没发现出现问题 在使用pylink时,需要用到Jlink的dll库,需要将D:\SEGGER\JLink_V766d文件夹下的JLink_x64.dll和JLi…

J-Link RTT 支持浮点数

RTT的使用 略 添加浮点数功能 注: 如下代码暂时不支持数据左补零,正浮点数前面显示等功能;不指定位宽时按实际位宽显示,不指定小数位数时按2位小数显示。 在SEGGER_RTT_printf.c文件的SEGGER_RTT_vprintf()函数中,添…

RTT Studio和Cubemx联合开发

1. RTT studio创建工程 创建工程 ## 创建完成以后的目录结构 2. 配置CubuMx 双击cubumx的图标打开CubeMx 配置时钟 生成代码 构建后的代码结构 编译代码满屏错误:不要慌 3. 新增脚本 新建scons脚本文件 SConscript 脚本内容如下,每次修改外…

STM32 RTT

1、安装包 如果安装过jlink,可以用evething来搜索“SEGGER_RTT”,选择“压缩文件”。 压缩文件中的RTT文件夹加入到项目当中 2、项目修改 3、使用 3.1 普通使用 SEGGER_RTT_printf(0, "Terminal 0 print:%d\r\n", i); 3.2 多端口…