車線検出の例を解く(作成中)


車線検出例


今回の課題は車線検査です.
使用言語:Python
使用手順:Jupyter lab、Anaconda 3
以下に課題の詳細を添付します.
OpenCVをpythonとして使用するには、anacondaプロンプトに個別にインストールする必要があります.
cmdにどのようにインストールしても適用されません.pip install opencv-pythonと入力して取り付けます.

jupyterlabは自動完了を提供しないため、kiteというファイルをインストールして自動完了を使用します.必要な方は参考にしてください.
22.04.18標準凧はファイルを提供していないので、グーグルでファイルを検索して使用したいです.

凧の拡張子を取り付けます。


jupyterlab環境で凧を使用するための拡張子をインストールする方法
jupyterlabのバージョンが3.0版でない場合は、3.0版のアップグレードから適用されます.
jupyterlabバージョンのアップグレード方法:anacondaプロンプトにpip install jupyterlab==3と入力します.
入力後kite extensionを設定します.
jupyterlabバージョン3.0以降:anacondaプロンプトにpip install "jupyterlab-kite>=2.0.2"と入力すると、jupyterlabで凧の適用を確認できます.

ビデオの車線を検出

"road.avi"ビデオで車線を検出opencvフォルダからビデオを読み込み

評価基準:


さいてきけんしゅつせいのう
秒数の内容(コードは注記する必要があります)

ファイルのコミット:


プロジェクトクリーンアップファイル(hwp、doc)
完全なコード添付ファイル
パージ使用アルゴリズム
なぜ使用するかを簡略化
結果画像を添付
どうすればいいか考えましたが、以下の過程で問題を解決します.
1.ビデオの読み込み
2.画像をグレースケールに変換(白黒画像に変換)
3.ぼかし処理によるノイズ除去(ガウスぼかし使用)
4.canny edgeで直線を検出する
5.線認知にROIを指定する
6.画像ビット演算の適用
7. cv.HoughLinesP換算座標値の使用
8.Optimization操作

1.ビデオの読み込み

import cv2

cap = cv2.VideoCapture("./video/road.avi")
if cap.isOpened():
    while True:
        ret, frame = cap.read()
        if ret:
            cv2.imshow("Video", frame)
            if cv2.waitKey(25) & 0xFF == ord("q"):
                print("program has shutdown in purpose")
                break
        else:
            print("no more frame!")
            break
            
cap.release()
cv2.destroyAllWindows()

動画が出ていることを確認できます.

2.画像をグレースケールに変換(白黒画像に変換)

import cv2

cap = cv2.VideoCapture("./video/road.avi")
if cap.isOpened():
    while True:
        ret, frame = cap.read()
        if ret:
            cap_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
            cv2.imshow("Video", cap_gray)
            if cv2.waitKey(25) & 0xFF == ord("q"):
                print("program has shutdown in purpose")
                break
        else:
            print("no more frame!")
            break
            
cap.release()
cv2.destroyAllWindows()

ビデオが白黒であることを確認できます.

3.ぼかし処理によるノイズ除去

import cv2

cap = cv2.VideoCapture("./video/road.avi")
if cap.isOpened():
    while True:
        ret, frame = cap.read()
        if ret:
            cap_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            blur = cv2.GaussianBlur(cap_gray, (5, 5), 3) # 시그마의 값을 3으로 설정해주었음
            cv2.imshow("Video", cap_gray)
            cv2.imshow("Video_blur", blur)

            if cv2.waitKey(25) & 0xFF == ord("q"):
                print("program has shutdown in purpose")
                break
        else:
            print("no more frame!")
            break
            
cap.release()
cv2.destroyAllWindows()

オリジナルの映像よりもぼやけた様子が見られます.canny edgeを使用するためにgaussian blurを使用した.

4.canny edgeで直線を検出する

import cv2
import numpy as np

cap = cv2.VideoCapture("./video/road.avi")

if cap.isOpened():
    while True:
        ret, frame = cap.read()
        if ret:
            cap_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            blur = cv2.GaussianBlur(cap_gray, (5, 5), 3) # 시그마X의 값을 3으로 설정해주었음
            Canny_edge = cv2.Canny(blur, 50, 150)
            cv2.imshow("Video", cap_gray)
            cv2.imshow("Video_blur", blur)
            cv2.imshow("Video_blur_canny", Canny_edge)

            if cv2.waitKey(25) & 0xFF == ord("q"):
                print("program has shutdown in purpose")
                break
        else:
            print("no more frame!")
            break
cap.release()
cv2.destroyAllWindows()
Canny_edgeのアプリケーションが見られます.minValmaxValの値を適切に設定して、不要な値を除去してください.

5.線認知にROIを指定する


ビデオで車線の範囲を指定してこそ、計算量が減少します.
したがって、画素の座標値を知る必要がある.
ピクセル座標値の理解方法import numpy as npの下にimport matplotlib.pyplot as pltcv2.imshow("Video_blur_Canny_edge", Canny_edge)の下にplt.imshow(Canny_edge)と入力すれば、画素値がわかります.

実行すると、上記の画像が表示されます.この方法では画素値を見つけることができるが,より容易に見つける方法がある.Canny_edge図を画板に切り取ると簡単に解決できます.

マウスでその位置のピクセル値を下の写真のように知ることができます.

6.画像ビット演算の適用


7. cv.HoughLinesPを使用して座標値を


8.Optimization操作