【计算机视觉学习之CV2图像操作实战:红绿灯识别1】

红绿灯识别1

步骤

  1. 高斯模糊
  2. 边缘提取
  3. 膨胀腐蚀
  4. 中值滤波
  5. 再次膨胀
  6. 霍夫圆环检测区域
  7. 将图片从BGR格式转换为HSV格式
  8. 设计颜色阈值
  9. 中值滤波
  10. 统计像素点数

import cv2
import numpy as np
COLOERS = {'red': (0, 0, 255),'green': (0, 255, 0),'yellow': (0, 255, 255),
}
def detect_color(img):hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)min_hsv_red1 = np.array([0, 100, 100])max_hsv_red1 = np.array([10, 255, 255])min_hsv_red2 = np.array([160, 100, 100])max_hsv_red2 = np.array([179, 255, 255])min_hsv_yellow = np.array([20, 5, 150])max_hsv_yellow = np.array([30, 255, 255])min_hsv_green = np.array([35, 5, 150])max_hsv_green = np.array([90, 255, 255])thresh_red = cv2.inRange(hsv, min_hsv_red1, max_hsv_red1) + cv2.inRange(hsv, min_hsv_red2, max_hsv_red2)thresh_yellow = cv2.inRange(hsv, min_hsv_yellow, max_hsv_yellow)thresh_green = cv2.inRange(hsv, min_hsv_green, max_hsv_green)red_blur = cv2.medianBlur(thresh_red, 5)yellow_blur = cv2.medianBlur(thresh_yellow, 5)green_blur = cv2.medianBlur(thresh_green, 5)red = cv2.countNonZero(red_blur)yellow = cv2.countNonZero(yellow_blur)green = cv2.countNonZero(green_blur)lights_color = max(red,yellow,green)if lights_color > 60:if lights_color == red:return 'red'elif lights_color == yellow:return 'yellow'elif lights_color == green:return 'green'if __name__ == '__main__':cap = cv2.VideoCapture('lights1.jpeg')while True:ret,frame = cap.read()if ret == False:breakimage = cv2.GaussianBlur(frame, (3, 3), 0)cv2.imshow("gs", image)image_Canny = cv2.Canny(image, 50, 100)cv2.imshow('01', image_Canny)kernalX = cv2.getStructuringElement(cv2.MORPH_RECT, (8, 3))kernalY = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 8))image_Canny = cv2.dilate(image_Canny, kernalX)image_Canny = cv2.erode(image_Canny, kernalX, iterations=4)image_Canny = cv2.dilate(image_Canny, kernalY)image_Canny = cv2.erode(image_Canny, kernalY, iterations=4)cv2.imshow('02', image_Canny)image_blur = cv2.medianBlur(image_Canny, 25)cv2.imshow('image_blur', image_blur)kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (35, 35))image_blur = cv2.dilate(image_blur, kernel)cv2.imshow('dilate', image_blur)circle = cv2.HoughCircles(image_blur, cv2.HOUGH_GRADIENT, 1, 40, param1=20, param2=10, minRadius=30, maxRadius=60)if not circle is None:circle = np.uint16(np.around(circle))for i in circle[0, :]:x, y, r = i[0], i[1], i[2]cropped_circle = frame[y - r:y + r, x - r:x + r]color = detect_color(cropped_circle)cv2.putText(frame, color, (x-r, y-r-5), cv2.FONT_HERSHEY_COMPLEX, 1, COLOERS[color], 2)cv2.circle(frame, (i[0], i[1]), i[2], COLOERS[color], 2)cv2.imshow("circle", frame)cv2.waitKey(0)

在这里插入图片描述
测试原图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3281625.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

探索Netty框架的核心构件

Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能、高可靠性的网络服务器和客户端程序。本文将深入探讨Netty框架的基本组件,帮助开发者更好地理解和使用这一强大的工具。 1. 事件循环(EventLoop)…

系统架构师--第1章计算机组成与体系结构-1.2 存储器系统

目录 1.2 存储器系统 1.2.1 主存储器 1.2.2 辅助存储器 1.2.3 Cache 存储器 (1)直接映像 (2)全相联映像 (3)组相联映像 1.2 存储器系统 存储器是用来存放程序和数据的部件,它是一个记忆装…

Vue - CSS基础学习

一、元素及属性 CSS 是为 web 内容添加样式的代码。 style标签 1.语法 1.除了选择器部分,每个规则集都应该包含在成对的大括号里({})。 2.在每个声明里要用冒号(:)将属性与属性值分隔开。 3.在每个规则集里要用分号…

Android Studio运行报错:module java.base dose not “opens java.io“ to unnamed module

今天第一次使用Android Studio运行一个安卓工程,报如图错误,应该是环境问题。 解决: 右上角的设置图标->settings->Buid,Execution,Deployment->Build Tools->Gradle->Gradle JDK->选择本地环境的java_home jdk(怎么安装…

SEQ 4. 转录本蛋白编码能力预测软件(CPAT)

简 介 深度转录组测序能够检测数千个新的转录本。这一发现大而“隐藏”的转录组重新激活了对能够快速区分编码和非编码 RNA 的方法的需求。在这里提出了一种新的无比对方法,编码潜在评估工具( CPAT) ,可以快速识别来自大量候选转录本的编码和非编码转…

公司里的IT是什么?

公司里的IT是什么? 文章目录 公司里的IT是什么?1、公司里的IT2、IT技术3、IT行业4、IT行业常见证书 如果对你有帮助,就点赞收藏把!(。・ω・。)ノ♡ 前段时间,在公…

【C语言】指针基础知识理解【续】

1. ⼆级指针 指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪⾥?这就是 ⼆级指针 。 1.1 引入二级指针 由于一级指针已经很熟悉,这里就不再赘述,这里我们重点探讨二级指针 下面先简单使用一个二级指针看…

TPAMI 2024 | 全新框架!深度学习可解释度量学习!

TPAMI 2024 | 全新框架!深度学习可解释度量学习! DIML: Deep Interpretable Metric Learning via Structural Matching 题目:DIML: 通过结构匹配的深度可解释度量学习 作者:Wenliang Zhao, Yongming Rao, Jie Zhou , and Jiwen…

C++笔试强训10

文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 前面做过很多次了,记住就好,不在赘述,选C。 内联函数经常使用的场景包括: 小型函数:当函数体非常小,只包含几条语句时&#xf…

【C++】模板的特化

文章目录 概念函数模板特化类模板特化全特化偏特化 概念 通常情况下,使用模板可以实现一些与类型无关的代码,但是有一些类型需要特殊处理,否则可能会得到一些错误的结果。 比如,在比较两个数的大小时,如果传入两个变量…

手动上电电路(电路收藏)

SW1按下 V1栅极对地 V1通 Vout给Mcu工作 GPIO2 高电平 V2通 SW1松开 V1栅极依然通过V2对地 维持V1通 Vout。再次按下SW1 GPIO1 对地 使Mcu收到中断 将GPIO2 输出低电平 V2关 松开SW1 V1栅极悬空 V1断开 Vout被截断

产品思维之什么是好的设计?

点击下方“JavaEdge”,选择“设为星标” 第一时间关注技术干货! 免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案…

原生微信小程序wxml2canvas生成海报并包保存至本地

Wxml2Canvas是什么? Wxml2Canvas 是一个用于微信小程序开发的工具库,主要用途是将小程序页面的内容绘制成图片,以便生成海报或保存分享图片到相册等功能。具体用途包括: ①海报生成功能:允许开发者将当前页面的特定部…

【机器学习】决策边界的基本概念以及如何在逻辑回归中找到决策边界

引言 在机器学习中,决策边界是分类算法用来区分不同类别数据点的线、面或超平面。这些边界通常是模型的预测规则,用于将特征空间中的点分配到不同的类别。决策边界可以是线性的,也可以是非线性的,取决于数据的分布和所使用的分类算…

鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇

一、概述 云数据库是一款基于对象模型的数据库,采用存储区、对象类型和对象三级结构。 数据模型 存储区 存储区是一个独立的数据存储区域,多个数据存储区之间相互独立,每个存储区拥有完全相同的对象类型定义 --类似于关系型数据库中的da…

ECMA6Script学习笔记(五)

【摘要】 本文是对自己学习ES6的学习笔记回顾,后面是概要: 本文介绍了ES6中的对象创建和拷贝方法。对象创建方面,ES6通过class关键字支持了面向对象的语法糖,包括属性设置、getter和setter方法、构造器、静态方法以及私有属性的定义。同时,展…

专业做护眼灯的有哪些品牌?五款市面主流护眼灯专业测评

专业做护眼灯的有哪些品牌?市面上出现的品牌毫不夸张的说,真的算得上是琳琅满目,而且每一个品牌都在说自己的产品才是最值得的,这种情况下来,很多人一时之间根本就不知道要选择哪一款比较好。而且还有一些还会买到低劣…

vue基础知识总结(2)--- axios的使用

一.下载Vue3: 选择自己想要下载的项目文件夹,cmd回车打开命令栏,执行 : cnpm init vuelatest 然后等待一会就可以创建一个项目,并更改项目名: √ 请输入项目名称: ... vue-project 之后按照…

华为仓颉语言测试申请

1. 申请网址 HarmonyOS NEXT仓颉语言开发者预览版 Beta招募- 华为开发者联盟 点击立即报名登录华为账号 勾选选项 , 点击同意 按要求填写信息即可 2. 申请通过后官方会通过邮件的方式发送相关下载途径 , 根据文档进行下载即可 package Cangmain(): Int64 {println("你…

AI技术修复奥运珍贵历史影像,《永不失色的她》再现百年奥运女性光彩

Greatness of HER ! AI致敬 , 了不起的「她」。 7月25日,在国际奥委会和各方力量的支持下,阿里云以AI技术修复奥运珍贵历史影像,让百年奥运女性的伟大光彩被看见,并在巴黎推出《永不失色的她》全球首映礼。 国际奥委会…