基于python的opencv图像处理对交通路口的红绿灯进行颜色检测(最简单的方法)
1.视频读取
首先把视频读取进来,因为我测试的视频是4k的所以我用resize调整了一下视频的分辨大小
cap = cv2.VideoCapture('video/小路口.mp4')
while True:ret,frame = cap.read()if ret == False:breakframe = cv2.resize(frame,(1920,1080))cv2.imshow('frame',frame)c = cv2.waitKey(10)if c==27:break
imshow()(如下图所示)
2.截取roi区域
截取roi的区域,也就是说,为了避免多余的干扰因素我们要把红绿灯的位置给截取出来(如下图所示)
截取后的roi(如下图所示)
3.转换hsv颜色空间
HSV颜色分量范围(详细参考原文链接)
一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。H: 0— 180
S: 0— 255
V: 0— 255
此处把部分红色归为紫色范围(如下图所示):
上面是已给好特定的颜色值,如果你的颜色效果不佳,可以通过python代码来对min和max值的微调,用opencv中的api来获取你所需理想的颜色,可以复制以下代码来进行颜色的调整。
1.首先你要截取roi区域的一张图片
2.读取这张图然后调整颜色值
颜色调整代码如下:(详细参考视频教程链接)
import cv2
import numpy as npdef empty(a):passdef stackImages(scale,imgArray):rows = len(imgArray)cols = len(imgArray[0])rowsAvailable = isinstance(imgArray[0], list)width = imgArray[0][0].shape[1]height = imgArray[0][0].shape[0]if rowsAvailable:for x in range ( 0, rows):for y in range(0, cols):if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]:imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)else:imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)imageBlank = np.zeros((height, width, 3), np.uint8)hor = [imageBlank]*rowshor_con = [imageBlank]*rowsfor x in range(0, rows):hor[x] = np.hstack(imgArray[x])ver = np.vstack(hor)else:for x in range(0, rows):if imgArray[x].shape[:2] == imgArray[0].shape[:2]:imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)else:imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)hor= np.hstack(imgArray)ver = horreturn ver#读取的图片路径
path = './green.jpg'
cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars",640,240)
cv2.createTrackbar("Hue Min","TrackBars",0,179,empty)
cv2.createTrackbar("Hue Max","TrackBars",19,179,empty)
cv2.createTrackbar("Sat Min","TrackBars",110,255,empty)
cv2.createTrackbar("Sat Max","TrackBars",240,255,empty)
cv2.createTrackbar("Val Min","TrackBars",153,255,empty)
cv2.createTrackbar("Val Max","TrackBars",255,255,empty)while True:img = cv2.imread(path)imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)h_min = cv2.getTrackbarPos("Hue Min","TrackBars")h_max = cv2.getTrackbarPos("Hue Max", "TrackBars")s_min = cv2.getTrackbarPos("Sat Min", "TrackBars")s_max = cv2.getTrackbarPos("Sat Max", "TrackBars")v_min = cv2.getTrackbarPos("Val Min", "TrackBars")v_max = cv2.getTrackbarPos("Val Max", "TrackBars")print(h_min,h_max,s_min,s_max,v_min,v_max)lower = np.array([h_min,s_min,v_min])upper = np.array([h_max,s_max,v_max])mask = cv2.inRange(imgHSV,lower,upper)imgResult = cv2.bitwise_and(img,img,mask=mask)imgStack = stackImages(0.6,([img,imgHSV],[mask,imgResult]))cv2.imshow("Stacked Images", imgStack)cv2.waitKey(1)
运行代码后调整的结果(如下图所示),很明显可以看到绿色已经被获取到。
4.二值图像颜色判定
因为图像是二值的图像,所以如果图像出现白点,也就是255,那么就取他的max最大值255,视频帧的不断变化然后遍历每个颜色值
red_color = np.max(red_blur)
green_color = np.max(green_blur)
if red_color == 255:print('red')
elif green_color == 255:print('green')
5.颜色结果画在图像上
用矩形框来框选出红绿灯区域
cv2.rectangle(frame,(1020,50),(1060,90),(0,0,255),2) #按坐标画出矩形框
cv2.putText(frame, "red", (1020, 40), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255),2)#显示red文本信息
6.完整代码
import cv2
import numpy as npcap = cv2.VideoCapture('video/小路口.mp4')
while True:ret,frame = cap.read()if ret == False:breakframe = cv2.resize(frame,(1920,1080))#截取roi区域roiColor = frame[50:90,950:1100]#转换hsv颜色空间hsv = cv2.cvtColor(roiColor,cv2.COLOR_BGR2HSV)#redlower_hsv_red = np.array([157,177,122])upper_hsv_red = np.array([179,255,255])mask_red = cv2.inRange(hsv,lowerb=lower_hsv_red,upperb=upper_hsv_red)#中值滤波red_blur = cv2.medianBlur(mask_red, 7)#greenlower_hsv_green = np.array([49,79,137])upper_hsv_green = np.array([90,255,255])mask_green = cv2.inRange(hsv,lowerb=lower_hsv_green,upperb=upper_hsv_green)#中值滤波green_blur = cv2.medianBlur(mask_green, 7)#因为图像是二值的图像,所以如果图像出现白点,也就是255,那么就取他的max最大值255red_color = np.max(red_blur)green_color = np.max(green_blur)#在red_color中判断二值图像如果数值等于255,那么就判定为redif red_color == 255:print('red')#。。。这是我经常会混淆的坐标。。。 就列举出来记一下。。。# y y+h x x+w#frame[50:90,950:1100]# x y x+w y+hcv2.rectangle(frame,(1020,50),(1060,90),(0,0,255),2) #按坐标画出矩形框cv2.putText(frame, "red", (1020, 40), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255),2)#显示red文本信息#在green_color中判断二值图像如果数值等于255,那么就判定为greenelif green_color == 255:print('green')cv2.rectangle(frame,(1020,50),(1060,90),(0,255,0),2)cv2.putText(frame, "green", (1020, 40), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 0),2)cv2.imshow('frame',frame)red_blur = cv2.resize(red_blur,(300,200))green_blur = cv2.resize(green_blur,(300,200))cv2.imshow('red_window',red_blur)cv2.imshow('green_window',green_blur)c = cv2.waitKey(10)if c==27:break
检测红灯的效果(如下图所示)
检测绿灯的效果(如下图所示)
最后!!!
第一次接触opencv!所以请各位视觉领域的大佬们勿喷我这个小菜鸡!(/狗头)
代码量非常少,无泛化能力,很low的一种做法。。。不过对于小白的我来说学习hsv颜色空间还是很有帮助滴!干就完了!奥利给!
基于python的opencv图像处理对交通路口的红绿灯进行颜色检测(最简单的方法)相关推荐
- cv2 python 获取斑马线_基于python的opencv图像处理实现对斑马线的检测示例
基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人 ...
- 基于python的opencv图像处理实现对斑马线的检测(最简单的方法!!!几十行代码搞定!!!)
基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人 ...
- 基于Python通过OpenCV实现的口罩识别系统理论篇
基于Python通过OpenCV实现的口罩识别系统理论设计篇 一.项目实现环境 基于Python 3.8.1版本 opencv-python 4.2.0.34版本 需要自己下载OpenCV的库文件,添 ...
- 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- ubuntu16.04安装python.h_ubuntu16.04 下基于 Python 的 OpenCV 的安装
ubuntu16.04 下基于 Python 的 OpenCV 的安装 这几天一直在学习基于 Python 的 OpenCV , 开发环境是在 Ubuntu16.04 下, 学习的心得就是基于 Pyt ...
- 基于python和Opencv将多张图片结合为一张图片的办法
基于python和Opencv将多张图片结合为一张图片的办法 需要用到的python包 代码本体 这两天写结课论文,需要做一个好看一点的图,要把多张图片结合为同一张图片,本来想用ps,但是懒,干脆用代 ...
- 基于Python的OpenCV+TensorFlow+Keras人脸识别实现
前言:本节要讲的人脸识别主要是借鉴了 一位研究生前辈的文章 我只是在他的基础上进行了改动,让代码能在现在的TensorFlow2.X 等的环境下运行 先看一下效果图 完整工程及源代码请点击链接下载:人 ...
- 基于python的数字图像处理--学习笔记(三)
基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...
- Python使用Opencv图像处理方法完成手势识别(一)
Opencv完成手势识别 HSV的提取 特征提取 轮廓绘制 完整代码 由于是使用Opencv完成手势识别,所以首先利用颜色特征是对手的颜色进行提取,获得HSV的最小值与最大值. HSV的提取 HSV颜 ...
- 基于Python与OpenCV的纸质票自动统计功能的实现(一)界面编程
基于Python与OpenCV的纸质票自动统计功能的实现(一)--界面编程 作为一个资深的自动化工程师,界面编程对我来说太熟悉不过了,但是当时用的都是工业界面编程软件,比如WINCC.组态王等等,在这 ...
最新文章
- Python:KNN
- 为office添加繁简体转换
- DNS通道检测 国外学术界研究情况——研究方法:基于流量,使用机器学习分类算法居多,也有使用聚类算法的;此外使用域名zif low也有...
- 【PAT甲级 删除字符串中的指定字符】1050 String Subtraction (20 分) C++
- springbboot加密打包_Spring Boot 配置 Security 密码加密
- 华为鸿蒙系统还没发布吗,华为没有孤军奋战,合作伙伴“雪中送炭”,鸿蒙系统正式发布!...
- 特斯拉2019年第二季度财报出炉:今年有望降低汽车售价
- Ovi商店开发者注册发布指南
- 使用jxbrowser在Swing中嵌入网页Web页面
- Winform 视频流叠加透明控件. 使用DSkin皮肤框架实现
- 这3款在线PS工具,得试试
- 第九十七章 SQL函数 MONTH
- Java并发编程3——线程状态转换
- 联想服务器装系统不能加载硬盘,联想电脑重装系统读不出硬盘怎么办
- 【生信】全基因组关联分析(GWAS)原理
- Control your destiny, or someone else will
- 5分钟快速撑起高校邮件保护伞
- 哈尔滨工业大学计算机考研资料汇总
- Mac OS QQ的截屏快捷键设置
- 数据采集的方法有哪些
热门文章
- ERROR StatusLogger No log4j2 configuration file found. Using default configuration解决方式
- Gin显示静态文件如图片,音频
- 医患诚信系统——软件项目的风险
- 操作系统的发展历史(综述性小论文)
- Android安全测试
- 厦门大学麦嘉仪:统计学专业到微众银行风控岗!
- 从木桶理论看自身职业生涯规划
- Windows10解决耳机被识别为扬声器问题
- java 滑杆和进度条_进度条 和 滑条
- 假设一张纸的厚度是1mm,那么这张纸折叠多少次可以到达珠穆朗玛峰的高度(8848m)?
基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人 ...
基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人 ...
基于Python通过OpenCV实现的口罩识别系统理论设计篇 一.项目实现环境 基于Python 3.8.1版本 opencv-python 4.2.0.34版本 需要自己下载OpenCV的库文件,添 ...
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
ubuntu16.04 下基于 Python 的 OpenCV 的安装 这几天一直在学习基于 Python 的 OpenCV , 开发环境是在 Ubuntu16.04 下, 学习的心得就是基于 Pyt ...
基于python和Opencv将多张图片结合为一张图片的办法 需要用到的python包 代码本体 这两天写结课论文,需要做一个好看一点的图,要把多张图片结合为同一张图片,本来想用ps,但是懒,干脆用代 ...
前言:本节要讲的人脸识别主要是借鉴了 一位研究生前辈的文章 我只是在他的基础上进行了改动,让代码能在现在的TensorFlow2.X 等的环境下运行 先看一下效果图 完整工程及源代码请点击链接下载:人 ...
基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...
Opencv完成手势识别 HSV的提取 特征提取 轮廓绘制 完整代码 由于是使用Opencv完成手势识别,所以首先利用颜色特征是对手的颜色进行提取,获得HSV的最小值与最大值. HSV的提取 HSV颜 ...
基于Python与OpenCV的纸质票自动统计功能的实现(一)--界面编程 作为一个资深的自动化工程师,界面编程对我来说太熟悉不过了,但是当时用的都是工业界面编程软件,比如WINCC.组态王等等,在这 ...