基于OpenCV的红绿灯识别

这篇具有很好参考价值的文章主要介绍了基于OpenCV的红绿灯识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于OpenCV的红绿灯识别

技术背景

为了实现轻舟航天机器人实现红绿灯的识别,决定采用传统算法OpenCV视觉技术。

技术介绍

航天机器人的红绿灯识别主要基于传统计算机视觉技术,利用OpenCV算法对视频流进行处理,以获取红绿灯的状态信息。具体而言,该系统通过连接工控机摄像头读取视频流,将视频帧转换成HSV色彩空间的图像,以便更好地识别出图像中的红色像素。

HSV是一种将RGB色彩空间中的点在倒圆锥体中的表示方法,其中色相、饱和度和亮度分别用于描述颜色的不同属性。色调(H)用角度度量,其取值范围为0°~360°,从红色开始按逆时针方向计算,具体的光谱色如黄色、青色和品红等的色调取值为60°、180°和300°,而它们的补色则分别为青色、洋红和黄色。饱和度(S)用于描述颜色接近光谱色的程度,其取值范围为0%~100%,值越大,颜色越饱和。亮度(V)表示颜色明亮的程度,其取值范围为0%(黑)到100%(白)。

在红绿灯识别过程中,系统将视频帧转换成HSV图像后,通过筛选出所有红色像素值,利用切片技术切出图像中的红绿灯兴趣区域。接着,系统通过统计区域中红色像素块数量,设定阈值来判断红绿灯的状态,如果红色像素块数量超过阈值,则判定红绿灯为红灯闪烁,小车禁止通行;反之,如果红色像素块数量小于阈值,则判定红绿灯为绿灯闪烁,小车可以通行。

这种基于传统计算机视觉技术的红绿灯识别系统具有精度高、鲁棒性强等优点,可以在复杂的环境下准确地判断红绿灯的状态,从而为机器人的自主导航和交通安全提供可靠的技术支持。

HSV 模型的三维表示从 RGB 立方体演化而来。设想从 RGB 沿立方体对角线的白色顶点 向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度, 明度沿垂直轴测量。HSV 颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H 和 S 无定义,代表黑色。圆锥的顶面中心处 V=max,S=0,H 无定义,代表白色。

基于OpenCV的红绿灯识别,航天智慧物流比赛,opencv,python,计算机视觉

代码实现


import cv2
import numpy as np

# from cv_nano3_good import Img, Video
def gstreamer_pipeline(
        capture_width=1280,
        capture_height=720,
        display_width=1280,
        display_height=720,
        framerate=120,
        flip_method=0,
):
    return (
            "nvarguscamerasrc ! "
            "video/x-raw(memory:NVMM), width=(int)%d, height=(int)%d, format=(string)NV12, framerate=(fraction)%d/1! "
            "nvvidconv flip-method=%d ! "
            "video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "
            "videoconvert ! "
            "video/x-raw, format=(string)BGR ! "
            "appsink"
            % (
                capture_width,
                capture_height,
                framerate,
                flip_method,
                display_width,
                display_height,
            )
    )


def extract_red(img):

    #转换为hsv颜色空间
    img_hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    rows,cols,channels=img.shape

    lower_red=np.array([156,43,46])
    # lower_red=np.array([157,177,122])
    # print(lower_red)
    upper_red=np.array([180,255,255])
    # print(upper_red)
    mask1=cv2.inRange(img_hsv,lower_red,upper_red)

    #拼接两个区间
    mask=mask1

    return mask



if __name__=='__main__':
    # if cv2.VideoCapture.isOpened():
        Video = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), cv2.CAP_GSTREAMER)
        print('open cam success')
        while True:
            while True:
                    
                    ret, Img = Video.read()
                    # cap=cv2.VideoCapture("./test/light.mp4")
                    # Img=cv2.imread("./test/02.jpg")
                    # ret, Img = img.read()
                    # cv2.imshow('./',Img)
                    # print(Img.)
                    img = extract_red(Img)
                    # print(img)
                    h, w = Img.shape[0], Img.shape[1]
                    # print(h)
                    # print(w)
                    # img_cut = img[100:400, 330:600]
                    img_cut=img[450:600,800:1100] #截取roi
                    raw_cut = Img[450:600, 800:1100]
                    # cv2.imshow('./',raw_cut)
                    # cv2.waitKey(0)
                    # cv2.imshow('./',img_cut)
                    # cv2.waitKey(0)
                    count = 0
                    x = img_cut[np.where(img_cut > 250)]
                    count = len(x)
                    print(count)
                    if count >= 1500:
                        print('red')
                        # green_light.publish(False)
                    else:
                        print('green')
                    # cv2.waitKey(30)
                        # green_light.publish(True) 
           



实现思路:

调取工控机摄像头读取视频流,将图像转成
HSV 通道,筛选出图像中的所有红色的像素值,再利用切片切出图像的兴趣区域,即红绿灯的所在图像
区域,最后统计区域中的红色像素块数量并设定阈值,超过此阈值则可判定红绿灯为红灯闪烁,小车禁
止通行,低于此阈值则可判定红绿灯为绿灯闪烁, 小车可以通行。

具体代码逻辑

这段代码的主要功能是从摄像头或视频流中读取图像,对图像进行红色像素的筛选和统计,以判断红绿灯的状态并输出结果。具体实现过程如下:

  1. 首先定义了一个函数gstreamer_pipeline,用于设置摄像头或视频流的参数,包括分辨率、帧率、翻转方式等。
  2. 接着定义了一个名为extract_red的函数,用于从图像中提取红色像素。该函数首先将图像从BGR色彩空间转换为HSV色彩空间,然后通过设置上下阈值提取红色像素。
  3. 在主程序中,通过调用cv2.VideoCapture函数连接摄像头或视频流,并循环读取图像。对于每一帧图像,首先调用extract_red函数提取红色像素,然后截取图像中的兴趣区域(即红绿灯的所在图像区域),并统计区域中红色像素块数量。如果红色像素块数量超过预设阈值,则判定红绿灯为红灯闪烁,否则判定为绿灯闪烁。
  4. 在输出判断结果后,程序会继续循环读取下一帧图像,直到程序被手动中断。

总的来说,该段代码主要实现了利用OpenCV对摄像头或视频流中的图像进行红绿灯状态判断的功能,其中最核心的部分是对红色像素的筛选和区域中红色像素块数量的统计。

总结

本文介绍了轻舟航天机器人实现红绿灯识别的技术背景和介绍。该系统利用OpenCV算法对视频流进行处理,识别出图像中的红色像素,并设定阈值来判断红绿灯的状态。该系统具有精度高、鲁棒性强等优点,可以为机器人的自主导航和交通安全提供技术支持。文章还介绍了HSV颜色空间的三维表示和代码实现过程仅供了解。文章来源地址https://www.toymoban.com/news/detail-612660.html

到了这里,关于基于OpenCV的红绿灯识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于51单片机的简易红绿灯电路

            单片机P1口控制数码管段选,P2口控制数码管位选,P0口控制两边的灯光。         首先是数码管控制函数,声明一个变量shift作为数码管位移量,首先进行位选,这里数码管使用的是共阴极数码管,所以位选脚为低时点亮,因为位移时除了置1的位保持1,其他的

    2024年02月11日
    浏览(39)
  • 基于单片机的红绿灯智能控制系统设计

    收藏和点赞,您的关注是我创作的动力   随着社会经济的快速发展以及人们生活水平的提高 ,机动车数量也在急剧增加 ,交通问题逐渐成为人们关注的重点对象,因城市发展所带来的交通拥堵等问题,利用智能交通来解决传统交通日渐出现的问题成为大势所趋。本设计基

    2024年02月04日
    浏览(73)
  • 基于51单片机十字路口红绿灯交通灯+紧急模式

    +无黄灯+紧急 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J010 十字路口交通灯由红、绿两色LED显示器组成,LED显示器显示切换倒计时,以秒为单位,每秒更新一次;为确保安全,绿LED计数到0转红,经5秒延时(显示红色0)后,另一道开始绿色倒计时。

    2024年02月04日
    浏览(64)
  • 深度学习之基于Yolov5闯红灯及红绿灯检测系统

    欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。    基于Yolov5的闯红灯及红绿灯检测系统是一种使用计算机视觉和深度学习技术实现的交通监控系统。它能够检测交通信号灯的状态(红灯、黄灯、绿灯),并识别车辆是否违反交通信号(闯红

    2024年02月06日
    浏览(39)
  • 高德导航红绿灯为啥能读秒?

    文章来源:https://www.zhihu.com/question/545653479/answer/3098666967 每天工作其实就是负责自己片区的红绿灯,一大早就去校对时间,然后发布到后台。是的,统计出来的,而且还是人工统计,有误差请见谅 真的是很辛苦了!不过还是希望他们记录的时候好好记,因为有的路口真的不准

    2024年02月09日
    浏览(42)
  • 交通信号灯课程设计(红绿灯)

    一、设计指标 1.1对设计课题进行简要阐述        由一条主干道和一条支干道的汇合点形成十字交叉路口,为确保车辆安全、迅速地通行,在交叉路口的每个人口处设置了红、绿、黄三色信号灯。        (1)用红、绿、黄三色发光二极管作信号灯,用传感器或逻辑开关

    2024年02月09日
    浏览(53)
  • 定时红绿灯(C51单片机)

    一.项目题目:利用中断处理制作的定时LED红绿灯系统 二.项目器件: 红色LED灯 绿色LED灯 黄色LED灯 100R电阻 电源 电容器 C51单片机 接地线 三.项目原理图 四.项目实现功能: 使用定时器/计数器T1工作方式1,采用中断方式控制P1口6个单片机串口,实现类似交通红绿灯功能

    2024年02月05日
    浏览(52)
  • 高德地图红绿灯读秒是怎么实现的?(一)

    关于这个读秒实现功能众说风云,目前有两种说法,一种说是靠大数据分析,一种说是靠交管部门数据。 我们先看一下 官方的回应 :可以自行去抖音看官方号的解释。 以下为原答: 有人说是接入了地方交管数据,其实政策难度很大且没必要。合理推测一下: 其实一个路口

    2024年02月02日
    浏览(39)
  • 红绿灯交通灯控制逻辑电路设计

    最近无聊整理一下以前的笔记之类的,发现以前的课设,简陋粗糙,还是记录下吧。 此设计有具体接线说明 实验箱大概如下图 课设任务及要求 1、满足如图 1 顺序工作流程 t为时间单位 2、满足两个方向的工作时序 即东西方向亮红灯时间应等于南北方向亮黄、绿灯时间之和,

    2024年02月10日
    浏览(54)
  • FPGA十字路口红绿灯控制器

    课程设计:十字路口红绿灯控制器 1.要求双方向8个灯的时序控制 2.要求显示倒计时 verilog hdl代码模块 测试程序模块 注意: 选择比较好的器件 测试文件命名为testbench.vt,否则不行。 采用BCD倒计时,经测试时序无错,代码结构清晰。 EDA课设,感谢论坛其他大佬的代码,基于

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包