車線検出の例を解く(作成中)
車線検出例
今回の課題は車線検査です.
使用言語: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
のアプリケーションが見られます.minVal
、maxVal
の値を適切に設定して、不要な値を除去してください.
5.線認知にROIを指定する
ビデオで車線の範囲を指定してこそ、計算量が減少します.
したがって、画素の座標値を知る必要がある.
ピクセル座標値の理解方法import numpy as np
の下にimport matplotlib.pyplot as plt
、cv2.imshow("Video_blur_Canny_edge", Canny_edge)
の下にplt.imshow(Canny_edge)
と入力すれば、画素値がわかります.
実行すると、上記の画像が表示されます.この方法では画素値を見つけることができるが,より容易に見つける方法がある.Canny_edge
図を画板に切り取ると簡単に解決できます.
マウスでその位置のピクセル値を下の写真のように知ることができます.
6.画像ビット演算の適用
7. cv.HoughLinesPを使用して座標値を
8.Optimization操作
Reference
この問題について(車線検出の例を解く(作成中)), 我々は、より多くの情報をここで見つけました
https://velog.io/@happy5368/차선검출-예제-풀이
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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()
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()
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()
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()
Reference
この問題について(車線検出の例を解く(作成中)), 我々は、より多くの情報をここで見つけました https://velog.io/@happy5368/차선검출-예제-풀이テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol