0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于Python對(duì)交通路口的紅綠燈進(jìn)行顏色檢測(cè)

新機(jī)器視覺(jué) ? 來(lái)源:CSDN技術(shù)社區(qū) ? 作者:2cy- ? 2021-10-13 09:32 ? 次閱讀
轉(zhuǎn)自|Python聯(lián)盟

1.視頻讀取

首先把視頻讀取進(jìn)來(lái),因?yàn)槲覝y(cè)試的視頻是4k的所以我用resize調(diào)整了一下視頻的分辨大小

cap = cv2.VideoCapture('video/小路口.mp4')while True:    ret,frame = cap.read()    if ret == False:        break    frame = cv2.resize(frame,(1920,1080))    cv2.imshow('frame',frame)    c = cv2.waitKey(10)    if c==27:break

imshow()

2.截取roi區(qū)域

截取roi的區(qū)域,也就是說(shuō),為了避免多余的干擾因素我們要把紅綠燈的位置給截取出來(lái)

截取后的roi

3.轉(zhuǎn)換hsv顏色空間

HSV顏色分量范圍

(詳細(xì)參考:https://www.cnblogs.com/wangyblzu/p/5710715.html)
一般對(duì)顏色空間的圖像進(jìn)行有效處理都是在HSV空間進(jìn)行的,然后對(duì)于基本色中對(duì)應(yīng)的HSV分量需要給定一個(gè)嚴(yán)格的范圍,下面是通過(guò)實(shí)驗(yàn)計(jì)算的模糊范圍(準(zhǔn)確的范圍在網(wǎng)上都沒(méi)有給出)。

H: 0— 180

S: 0— 255

V: 0— 255

此處把部分紅色歸為紫色范圍(如下圖所示):

da25da02-14b7-11ec-8fb8-12bb97331649.png

上面是已給好特定的顏色值,如果你的顏色效果不佳,可以通過(guò)python代碼來(lái)對(duì)min和max值的微調(diào),用opencv中的api來(lái)獲取你所需理想的顏色,可以復(fù)制以下代碼來(lái)進(jìn)行顏色的調(diào)整。
1.首先你要截取roi區(qū)域的一張圖片
2.讀取這張圖然后調(diào)整顏色值

顏色調(diào)整代碼如下:

(詳細(xì)參考:https://www.bilibili.com/video/BV16K411W7x9)

import cv2import numpy as np
def empty(a):    pass
def 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]*rows        hor_con = [imageBlank]*rows        for 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 = hor    return 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)

運(yùn)行代碼后調(diào)整的結(jié)果(如下圖所示),很明顯可以看到綠色已經(jīng)被獲取到。

da35e1a4-14b7-11ec-8fb8-12bb97331649.png

4.二值圖像顏色判定

因?yàn)閳D像是二值的圖像,所以如果圖像出現(xiàn)白點(diǎn),也就是255,那么就取他的max最大值255,視頻幀的不斷變化然后遍歷每個(gè)顏色值

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.顏色結(jié)果畫在圖像上

用矩形框來(lái)框選出紅綠燈區(qū)域

cv2.rectangle(frame,(1020,50),(1060,90),(0,0,255),2) #按坐標(biāo)畫出矩形框cv2.putText(frame,"red",(1020,40),cv2.FONT_HERSHEY_COMPLEX,1,(0,0,255),2)#顯示red文本信息

6.完整代碼

import cv2import numpy as np
cap = cv2.VideoCapture('video/小路口.mp4')while True:    ret,frame = cap.read()    if ret == False:        break    frame = cv2.resize(frame,(1920,1080))    #截取roi區(qū)域    roiColor = frame[50:90,950:1100]    #轉(zhuǎn)換hsv顏色空間    hsv = cv2.cvtColor(roiColor,cv2.COLOR_BGR2HSV)
    #red    lower_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)    #green    lower_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)
    #因?yàn)閳D像是二值的圖像,所以如果圖像出現(xiàn)白點(diǎn),也就是255,那么就取他的max最大值255    red_color = np.max(red_blur)    green_color = np.max(green_blur)    #在red_color中判斷二值圖像如果數(shù)值等于255,那么就判定為red    if red_color == 255:        print('red')                        #。。。這是我經(jīng)常會(huì)混淆的坐標(biāo)。。。就列舉出來(lái)記一下。。。                        #      y  y+h x  x+w                        #frame[50:90,950:1100]
                        #     x   y    x+w  y+h        cv2.rectangle(frame,(1020,50),(1060,90),(0,0,255),2) #按坐標(biāo)畫出矩形框        cv2.putText(frame, "red", (1020, 40), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255),2)#顯示red文本信息    #在green_color中判斷二值圖像如果數(shù)值等于255,那么就判定為green    elif 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
編輯:jq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67767
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84078
  • 4K
    4K
    +關(guān)注

    關(guān)注

    2

    文章

    521

    瀏覽量

    59678
  • HSV
    HSV
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    2586

原文標(biāo)題:基于Python對(duì)交通路口的紅綠燈進(jìn)行顏色檢測(cè)

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    防反接電路、防倒灌電路、過(guò)流保護(hù)和ESP相關(guān)知識(shí)

    ,電路也不會(huì)受損,電器照樣能用。 防倒灌電路呢,它有點(diǎn)像交通路口紅綠燈。在一個(gè)系統(tǒng)中,如果有多個(gè)電源同時(shí)工作,有時(shí)候一個(gè)電源的電壓可能會(huì)高于另一個(gè),這時(shí)候如果不加控制,電流就會(huì)從高壓往低壓流,這就
    發(fā)表于 09-15 07:29

    東土科技自主研發(fā)的人工智能交通服務(wù)器實(shí)現(xiàn)規(guī)?;瘧?yīng)用

    在智能交通領(lǐng)域,一場(chǎng)由東土科技引領(lǐng)的技術(shù)革新正悄然改變著城市交通的面貌。近日,東土科技自主研發(fā)的人工智能交通服務(wù)器在北京城市副中心通州區(qū)成功實(shí)現(xiàn)了580處交通路口的規(guī)?;瘧?yīng)用,標(biāo)志著我
    的頭像 發(fā)表于 07-17 15:42 ?333次閱讀

    TomTom交通技術(shù)支持Miovision交通信號(hào)預(yù)測(cè)和車聯(lián)網(wǎng)(V2X) 解決方案系列

    擁堵和排放,改善公共安全。 Miovision支持的產(chǎn)品如奧迪的紅綠燈信息等,這項(xiàng)首創(chuàng)的技術(shù)可幫助駕駛員
    的頭像 發(fā)表于 07-02 15:40 ?1006次閱讀

    2024智慧交通路燈行業(yè)發(fā)展趨勢(shì)及市場(chǎng)現(xiàn)狀分析

    燈市場(chǎng)規(guī)模將達(dá)2432億元。 當(dāng)下智能汽車和智慧交通路燈的數(shù)字化發(fā)展,正在從解決單一場(chǎng)景問(wèn)題,向大規(guī)模的群體智慧轉(zhuǎn)變。再看騰訊的步伐,騰訊發(fā)力產(chǎn)業(yè)互聯(lián)網(wǎng)以來(lái),深耕交通出行領(lǐng)域,致力于將交通OS、實(shí)時(shí)孿生等技術(shù)與具體場(chǎng)景
    的頭像 發(fā)表于 05-10 16:49 ?601次閱讀

    STM32 ST-LINK Utility 4.2燒程序,過(guò)程中ST LINK的紅綠燈一直不停閃爍,顯示燒錄成功芯片沒(méi)有反應(yīng)為什么?

    用的是STM32 ST-LINK Utility 4.2燒程序,這個(gè)軟件可以識(shí)別芯片,過(guò)程中ST LINK的紅綠燈一直不停閃爍,最后顯示燒錄成功,但是芯片沒(méi)有反應(yīng)
    發(fā)表于 03-20 07:35

    干貨!89C51單片機(jī)模擬交通燈控制,原理圖,仿真程序等完整資料

    是對(duì)通行時(shí)間做調(diào)整,交通管制鍵是對(duì)紅綠燈系統(tǒng)進(jìn)行強(qiáng)制設(shè)置。 當(dāng)系統(tǒng)上電或手動(dòng)復(fù)位之后,默認(rèn)模式下會(huì)按照斷電前程序里記錄的參數(shù)運(yùn)行。若此時(shí)設(shè)置鍵按下,則進(jìn)入通行時(shí)間設(shè)置狀態(tài),數(shù)碼管上顯示原本記錄的時(shí)間并閃爍
    發(fā)表于 03-14 18:23

    揭秘 “紅綠燈倒計(jì)時(shí)” 原理

    如今,高德“紅綠燈倒計(jì)時(shí)”功能已服務(wù)遍布全國(guó)范圍內(nèi)近240個(gè)城市的8萬(wàn)多個(gè)紅綠燈路口,未來(lái)還將進(jìn)一步拓展至更高數(shù)量級(jí)。
    的頭像 發(fā)表于 02-21 17:19 ?1467次閱讀

    創(chuàng)維液晶電視不開(kāi)機(jī)故障維修方法

    圖1是一臺(tái)送修的創(chuàng)維32寸液晶電視,型號(hào)是32L28RM,故障現(xiàn)象是不開(kāi)機(jī),有時(shí)會(huì)開(kāi)機(jī),不開(kāi)機(jī)時(shí)紅綠燈交替閃爍。
    的頭像 發(fā)表于 01-26 09:19 ?1588次閱讀
    創(chuàng)維液晶電視不開(kāi)機(jī)故障維修方法

    【飛騰派4G版免費(fèi)試用】紅綠燈項(xiàng)目-2飛騰派 openkylin 進(jìn)行IO控制2

    | 接上文【飛騰派4G版免費(fèi)試用】紅綠燈項(xiàng)目-2飛騰派 openkylin 進(jìn)行IO控制
    發(fā)表于 01-17 19:46

    【飛騰派4G版免費(fèi)試用】紅綠燈項(xiàng)目-2飛騰派 openkylin 進(jìn)行IO控制

    接上文[【飛騰派4G版免費(fèi)試用】2飛騰派 openkylin 進(jìn)行IO控制-燈閃(https://bbs.elecfans.com/jishu_2405776_1_1.html) 紅綠燈項(xiàng)目
    發(fā)表于 01-13 22:34

    紅綠藍(lán)交替變化的原理

    紅綠藍(lán)交替變化是指通過(guò)控制紅、綠、藍(lán)三原色的不同亮度和混合比例,來(lái)呈現(xiàn)出各種不同的顏色效果。這種變化在許多領(lǐng)域都有應(yīng)用,包括電子顯示、照明設(shè)計(jì)、藝術(shù)創(chuàng)作等等。下面將詳細(xì)介紹紅綠藍(lán)交替變化
    的頭像 發(fā)表于 01-04 09:24 ?854次閱讀

    百度網(wǎng)訊“車輛控制方法、裝置、電子設(shè)備及存儲(chǔ)介質(zhì)”專利公布

    根據(jù)專利摘要,本公司提出了汽車控制方法、裝置、電子裝置及存儲(chǔ)介質(zhì),包括計(jì)算機(jī)技術(shù)領(lǐng)域,特別是智能交通、云計(jì)算、大數(shù)據(jù)、深度學(xué)習(xí)等人工智能技術(shù)領(lǐng)域。包括:車輛通行道路滿足預(yù)先設(shè)定的條件,來(lái)決定的情況下,車輛目前的第一個(gè)行駛數(shù)據(jù),第一個(gè)紅綠燈的第一個(gè)有狀態(tài)數(shù)據(jù)和第一個(gè)
    的頭像 發(fā)表于 11-15 10:35 ?525次閱讀
    百度網(wǎng)訊“車輛控制方法、裝置、電子設(shè)備及存儲(chǔ)介質(zhì)”專利公布

    使用TCS3200模塊進(jìn)行顏色識(shí)別

    該項(xiàng)目用于檢測(cè)顏色并使用TCS3200顏色傳感器模塊和Arduino板在LCD上顯示顏色名稱。傳感器使用彩色光電二極管輸出紅色,綠色和藍(lán)色的反射光值。
    的頭像 發(fā)表于 10-15 16:11 ?1755次閱讀
    使用TCS3200模塊<b class='flag-5'>進(jìn)行</b><b class='flag-5'>顏色</b>識(shí)別

    基于51單片機(jī)的交通燈設(shè)計(jì)

    一、 設(shè)計(jì)任務(wù)本實(shí)驗(yàn)?zāi)康氖峭ㄟ^(guò)使用AT89s52系列芯片制作一個(gè)交通燈設(shè)計(jì)電路,實(shí)現(xiàn)南北東西交通運(yùn)行的,與紅綠燈秒計(jì)時(shí)功能、數(shù)碼管顯示功能等。二、 性能指標(biāo)要求1、各方向的紅、綠色信號(hào)燈能按照
    發(fā)表于 10-15 10:35 ?7次下載

    什么是高精度地圖

    特征 (2)嘗試從點(diǎn)云中提取車道線、燈桿、紅綠燈等 人工驗(yàn)證與產(chǎn)品編譯: 這一環(huán)節(jié)由人工完成,自動(dòng)化處理的數(shù)據(jù)還不能百分百準(zhǔn)確,需要人工進(jìn)行最后一步的確認(rèn)和完善。按照現(xiàn)在的情況,一名員工修正的數(shù)據(jù)量在
    發(fā)表于 10-07 14:24