ビデオから道路レーンを検出する必要があります。ここに私のやり方があります。PythonとOpenCV - 私の車線検出アルゴリズムを改善する
- グレースケールROI
- が
cv2.equalizeHist
- とグレイスケールROI(3) にガウスぼかしを適用する等化
- (中央部の焦点を合わせる)画像をスライスすることによって関心領域(ROI)を決定
- しきい値(4)
cv2.adaptiveThreshold
- Skeletonizeを用いて(5)
skimage.morphology.skeletonize
- を使用してを適用します
rho
)は直線が右(ボトムアップに傾斜していることを意味する(肯定的である場合、それは以下となりますようにcv2.HoughLines
については(6)
上、私が設定しました(角度の範囲を設定しています)
rho
が負の場合(直線は左に傾いています(ボトムアップ)、線が描かれている場合のみ線を描きます特定の角度にある)
これは、線を描くための私のコードです:私はちょうどcv2.HoughLines
機能のために上記の何をしたかしなかった場合は
lines = cv2.HoughLines(image_bin, 1, np.pi/180, 50)
try:
range = lines.shape[0]
except AttributeError:
range = 0
for i in xrange(range):
for rho, theta in lines[i]:
if rho > 0 and (np.pi*1/10 < theta < np.pi*4/10):
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
cv2.line(roi, (x1, y1), (x2, y2), (0, 255, 0))
if rho < 0 and (np.pi*7/10 < theta < np.pi*9/10):
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
cv2.line(roi, (x1, y1), (x2, y2), (0, 255, 0))
、私が描かれた不要な行の多くがあるだろうと信じています。
パラメータを調整した後、私はかなり良い結果を得ましたが、それはただ1つの画像のためです。私はそれが変化し続けるビデオには良いとは思わない。 私が気にするのは、必要な線を描くアルゴリズム(道路線)に関することです。もっと良い方法はありますか?少なくとも私より優れています。
これは私の結果である:
イコライズヒストグラム、閾値、およびROIのスケルトン画像:
どうすればいいですか?申し訳ありませんが、まだプログラミングと画像処理の初心者です。 – Hilman
私はいくつかのノートを追加しました。コードを提供していただきありがとうございます。それはC + +で、特定の実装はあなたとは非常に異なります - 基本的に、私はあなたのアプリケーションのためにそれを適応させるための十分な時間がありません。 – Aenimated1