計算機設計大賽 深度學習機器視覺車道線識別與檢測 -自動駕駛

文章目錄

  • 1 前言
  • 2 先上成果
  • 3 車道線
  • 4 問題抽象(建立模型)
  • 5 幀掩碼(Frame Mask)
  • 6 車道檢測的圖像預處理
  • 7 圖像閾值化
  • 8 霍夫線變換
  • 9 實現車道檢測
    • 9.1 幀掩碼創建
    • 9.2 圖像預處理
      • 9.2.1 圖像閾值化
      • 9.2.2 霍夫線變換
  • 最后

1 前言

🔥 優質競賽項目系列,今天要分享的是

🚩 機器視覺 深度學習 車道線檢測 - opencv

該項目較為新穎,適合作為競賽課題方向,學長非常推薦!

🥇學長這里給一個題目綜合評分(每項滿分5分)

  • 難度系數:3分
  • 工作量:3分
  • 創新點:4分

🧿 更多資料, 項目分享:

https://gitee.com/dancheng-senior/postgraduate

2 先上成果

請添加圖片描述

3 車道線

理解車道檢測的概念

那么什么是車道檢測?以下是百度百科對車道的定義:

車道,又稱行車線、車行道,是用在供車輛行經的道路。在一般公路和高速公路都有設置,高速公路對車道使用帶有法律上的規則,例如行車道和超車道。

在這里插入圖片描述

對其進行定義是很重要的,因為它使我們能夠繼續進行車道檢測概念。我們在建立一個系統時不能有任何含糊不清的地方。

正如我前面提到的,車道檢測是自動駕駛汽車和自動駕駛汽車的關鍵組成部分。這是駕駛場景理解的重要研究課題之一。一旦獲得車道位置,車輛就知道去哪里,并避免撞上其他車道或離開道路。這樣可以防止駕駛員/車輛系統偏離車道。

以下是一些隨機道路圖像(第一行)及其檢測到的車道(第二行):

4 問題抽象(建立模型)

我們希望執行的任務是實時檢測視頻中的車道。我們可以通過多種方式進行車道檢測。我們可以使用基于學習的方法,例如在帶注釋的視頻數據集上訓練深度學習模型,或者使用預訓練好的模型。

然而,也有更簡單的方法來執行車道檢測。在這里,學長將向你展示如何在不使用任何深入學習模型的情況下完成此任務。

下面是將要處理的視頻的一個幀:

正如我們在這張圖片中看到的,我們有四條車道被白色的車道標線隔開。所以,要檢測車道,我們必須檢測車道兩邊的白色標記。這就引出了一個關鍵問題——我們如何檢測車道標線?

除了車道標線之外,場景中還有許多其他對象。道路上有車輛、路側護欄、路燈等,在視頻中,每一幀都會有場景變化。這很好地反映了真實的駕駛情況。

因此,在解決車道檢測問題之前,我們必須找到一種方法來忽略駕駛場景中不需要的對象。

我們現在能做的一件事就是縮小感興趣的領域。與其使用整個幀,不如只使用幀的一部分。在下面的圖像中,除了車道的標記之外,其他所有內容都隱藏了。當車輛移動時,車道標線將或多或少地落在該區域內:

在這里插入圖片描述

5 幀掩碼(Frame Mask)

幀掩碼只是一個NumPy數組。

當我們想對圖像應用掩碼時,只需將圖像中所需區域的像素值更改為0、255或任何其他數字。

下面給出了一個圖像掩蔽的例子。圖像中某個區域的像素值已設置為0:

在這里插入圖片描述
這是一種非常簡單但有效的從圖像中去除不需要的區域和對象的方法。

6 車道檢測的圖像預處理

我們將首先對輸入視頻中的所有幀應用掩碼。

然后,我們將應用圖像閾值化和霍夫線變換來檢測車道標線。

7 圖像閾值化

在這種方法中,灰度圖像的像素值根據閾值被指定為表示黑白顏色的兩個值之一。因此,如果一個像素的值大于一個閾值,它被賦予一個值,否則它被賦予另一個值。

在這里插入圖片描述

如上所示,對蒙版圖像應用閾值后,我們只得到輸出圖像中的車道標線。現在我們可以通過霍夫線變換很容易地檢測出這些標記。

8 霍夫線變換

霍夫線變換是一種檢測任何可以用數學方法表示的形狀的方法。

例如,它可以檢測矩形、圓、三角形或直線等形狀。我們感興趣的是檢測可以表示為直線的車道標線。

在執行圖像閾值化后對圖像應用霍夫線變換將提供以下輸出:

在這里插入圖片描述

9 實現車道檢測

是時候用Python實現這個車道檢測項目了!我推薦使用Google Colab,因為構建車道檢測系統需要計算能力。

首先導入所需的庫:

?

import os
import re
import cv2
import numpy as np
from tqdm import tqdm_notebook
import matplotlib.pyplot as plt
# 獲取幀的文件名
col_frames = os.listdir('frames/')
col_frames.sort(key=lambda f: int(re.sub('\D', '', f)))# 加載幀
col_images=[]
for i in tqdm_notebook(col_frames):img = cv2.imread('frames/'+i)col_images.append(img)
# 指定一個索引
idx = 457# plot frame
plt.figure(figsize=(10,10))
plt.imshow(col_images[idx][:,:,0], cmap= "gray")
plt.show()

在這里插入圖片描述

9.1 幀掩碼創建

我們感興趣的區域是一個多邊形。我們想掩蓋除了這個區域以外的一切。因此,我們首先必須指定多邊形的坐標,然后使用它來準備幀掩碼:

在這里插入圖片描述
在這里插入圖片描述

9.2 圖像預處理

我們必須對視頻幀執行一些圖像預處理操作來檢測所需的車道。預處理操作包括:

  • 圖像閾值化

  • 霍夫線變換

9.2.1 圖像閾值化

在這里插入圖片描述

9.2.2 霍夫線變換

?

lines = cv2.HoughLinesP(thresh, 1, np.pi/180, 30, maxLineGap=200)# 創建原始幀的副本
dmy = col_images[idx][:,:,0].copy()# 霍夫線
for line in lines:x1, y1, x2, y2 = line[0]cv2.line(dmy, (x1, y1), (x2, y2), (255, 0, 0), 3)# 畫出幀
plt.figure(figsize=(10,10))
plt.imshow(dmy, cmap= "gray")
plt.show()

在這里插入圖片描述

最后

🧿 更多資料, 項目分享:

https://gitee.com/dancheng-senior/postgraduate

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715961.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715961.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

怎么運行/opencv/modules/imgproc/test下的test_cvtyuv.cpp

怎么運行/opencv/modules/imgproc/test下的test_cvtyuv.cpp 要運行test_cvtyuv.cpp,你需要按照以下步驟操作: 獲取OpenCV源代碼,編譯并安裝opencv:首先,確保你已經下載并安裝了OpenCV。如果沒有,請前往Open…

Leetcode630. 課程表 III

Every day a Leetcode 題目來源:630. 課程表 III 解法1:反悔貪心 經驗告訴我們,在準備期末考試的時候,先考的課程先準備。同理,lastDay 越早的課程,應當越早上完。但是,有的課程 duration 比…

2023年09月CCF-GESP編程能力等級認證Scratch圖形化編程四級真題解析

一、單選題(共15題,共30分) 第1題 人們所使用的手機上安裝的 App 通常指的是( )。 A:一款操作系統 B:一款應用軟件 C:一種通話設備 D:以上都不對 答案:B 第2題 下列流程圖的輸出結果是?( ) A:9 B:7 C:5 D:11 答案:A 第3題 默認小貓角色,執行下列程序…

IO,硬盤與文件

IO與計算機存儲空間 IO(輸入/輸出)是計算機領域中指的是數據在計算機與外部設備之間的傳輸過程。存儲通常指的是計算機中用來保存數據的介質或設備,硬盤是存儲設備的一種,通常是指硬盤驅動器(Hard Disk Drive&#xf…

文章解讀與仿真程序復現思路——電網技術EI\CSCD\北大核心《考慮時空相關性的流域水風光多能互補系統高維不確定性場景生成方法》

本專欄欄目提供文章與程序復現思路,具體已有的論文與論文源程序可翻閱本博主免費的專欄欄目《論文與完整程序》 論文與完整源程序_電網論文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 這篇文章的標題涵蓋了以下幾個關鍵方…

C語言編程大題

以下總結編程大題的常考題型 1,輸出 100-200 之間所有素數。 要求: (1)編寫一個判斷一個整數是否為素數的函數 void prime(int n),若是素數則輸出,否則不輸出 (2)主函數中調用 prime 函數,輸出 100-200 之間所有素數 說明:素數是指除了1和該數本身之外,不能被其它任何整…

【C++】用命名空間避免命名沖突

🌸博主主頁:釉色清風🌸文章專欄:C🌸今日語錄:如果神明還不幫你,說明他相信你。 🪷文章簡介:這篇文章是結合譚浩強老師的書以及自己的理解,同時加入了一些例子…

NOC2023軟件創意編程(學而思賽道)python小高組初賽真題

軟件創意編程 一、參賽范圍 1.參賽組別:小學低年級組(1-3 年級)、小學高年級組(4-6 年級)、初中組。 2.參賽人數:1 人。 3.指導教師:1 人(可空缺)。 4.每人限參加 1 個賽項。 組別確定:以地方教育行政主管部門(教委、教育廳、教育局) 認定的選手所屬學段為準。 二、…

MATLAB知識點:if條件判斷語句的嵌套

?講解視頻:可以在bilibili搜索《MATLAB教程新手入門篇——數學建模清風主講》。? MATLAB教程新手入門篇(數學建模清風主講,適合零基礎同學觀看)_嗶哩嗶哩_bilibili 節選自?第4章:MATLAB程序流程控制 我們通過一個…

基于springboot+vue的教師工作量管理系統

博主主頁:貓頭鷹源碼 博主簡介:Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰,歡迎高校老師\講師\同行交流合作 ?主要內容:畢業設計(Javaweb項目|小程序|Pyt…

Java集合-Map接口

在Java中,Map接口表示鍵值對的集合,其中每個鍵都是唯一的,并且每個鍵映射到一個值。Map接口是集合框架中的一部分,位于java.util包中。它定義了一系列操作來管理鍵值對,例如添加鍵值對、刪除鍵值對、獲取鍵對應的值等。…

7.1.1 selenium介紹及安裝chromedriver

目錄 1. Selenium的用途 2. 安裝Selenium庫 3. 安裝chromedriver 1. 查看谷歌版本號?編輯 2. 找到最新版本及下載 3. 配置環境變量 4. 檢測是否配置成功 5. 用python初始化瀏覽器對象檢測: 6. 參考鏈接 1. Selenium的用途 在前面我們提到:在我…

Github項目推薦-LightMirrors

項目地址 https://github.com/NoCLin/LightMirrors 項目簡述 “LightMirrors是一個開源的緩存鏡像站服務,用于加速軟件包下載和鏡像拉取。目前支持DockerHub、PyPI、PyTorch、NPM等鏡像緩存服務。 當前項目仍處于早期階段。”–來自項目說明。 也就是說&#xff…

爆紅提醒:ESLint: Parsing error: Unexpected token. Did you mean `{‘>‘}` or `gt;`?

錯誤情況:> 會爆紅提示:ESLint: Parsing error: Unexpected token. Did you mean {>} or >? function().then((res) > {console.log(res.data); }解決方法:修改.eslintrc或者.eslintrc.js的配置 module.exports {// 其他配置..…

RocketMq——Consume相關源碼

摘要 RocketMQ只要有CommitLog文件就可以正常運行了,那為何還要維護ConsumeQueue文件呢? ConsumeQueue是消費隊列,引入它的目的是為了提高消費者的消費速度。畢竟RocketMQ是基于Topic主題訂閱模式的,消費者往往只關心自己訂閱的…

定制開發一款家政小程序,應知應會

引言 在這個快節奏的現代生活中,人們對高效、便捷的家政服務的需求日益增加。隨著社會結構的變化和職業生活的繁忙,許多家庭面臨著時間不足、精力不濟的挑戰。在這種情況下,家政服務成為解決問題的有效途徑。然而,傳統的家政服務…

Python——桌面攝像頭軟件(附源碼+打包)

目錄 一、前言 二、桌面攝像頭軟件 2.1、下載項目 2.2、功能介紹 三、打包工具(nuitka) 四、項目文件復制(我全部合到一個文件里面了) 五、結語 一、前言 看見b站的向軍大叔用electron制作了一個桌面攝像頭軟件 但是&#x…

PPT 批量刪除每頁相同位置的內容

方法: 選擇【視圖】,【宏】,設置宏的名稱,點創建將下列函數復制到宏中,在ppt中先選擇某個要刪除的對象,然后運行宏即可 函數內容如下 Sub Delete( ) Dim oSlide As Slide, oShape As Shape Dim myWidt…

如何在jupyter notebook 中下載第三方庫

在anconda 中找到: Anaconda Prompt 進入頁面后的樣式: 在黑色框中輸入: 下載第三方庫的命令 第三方庫: 三種輸入方式 標準保證正確 pip instsall 包名 -i 鏡像源地址 pip install pip 是 Python 包管理工具,…

新項目,Linux上一鍵安裝MySQL,Redis,Nacos,Minio

大家好,我是 jonssonyan 分享一個我的一個開源項目,這是一個在 Linux 平臺上一鍵安裝各種軟件的腳本項目,腳本使用 Shell 語言編寫,后續還會增加更多軟件的一鍵安裝,代碼在 GitHub 上全部開源的,開源地址如…