簡體   English   中英

關於使用 OpenCV 進行線檢測

[英]About Line detection by using OpenCV

我試着在下圖中標記道路,黃色的中間線和白色的邊緣線:

在此處輸入圖像描述

我使用 Hough Transfrom 的標准代碼。 我的代碼如下:

import cv2
import numpy as np
img = cv2.imread('Road3.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


low_yellow=np.array([18, 94, 140])
up_yellow=np.array([48, 255, 255])
mask=cv2.inRange(hsv, low_yellow, up_yellow)
edges = cv2.Canny(mask,75,150)

lines = cv2.HoughLinesP(edges,1,np.pi/180,50,maxLineGap=250)
for line in lines:
    x1,y1,x2,y2 = line[0]
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),5)

cv2.imshow('image', img)
cv2.imshow("edges", edges)
k = cv2.waitKey(0)
cv2.destroyAllWindows()

但是有錯誤反饋:

在此處輸入圖像描述

更改線路后

hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

我的 output 如下: 在此處輸入圖像描述 在此處輸入圖像描述

看來這只是圖片的一部分,但我不知道問題出在哪里。

根據 Ahmet 的回答,我可以得到如下的黑色圖片,但彩色圖片是整張圖片的一部分。

在此處輸入圖像描述

我猜問題出在這一行:

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

這里的變量名稱是hsv ,但cv2.COLOR_BGR2GRAY不會為您生成 hsv 圖像。 相反,它將為您提供單通道 Graysclae 圖像。 對於 HSV,您需要使用cv2.COLOR_BGR2HSV

如此所述,將 RGB 轉換為 HSV 的正確方法是使用cv2.COLOR_BGR2HSV標志:

# Convert BGR to HSV
mask = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

當您更改線路時,output:

在此處輸入圖像描述

  • 我如何獲得結果?

我使用imwrite並將圖像保存到我的本地電腦中。

cv2.imwrite("out.png", edges)

但是如果你想顯示,首先你需要調整大小才能看到整個圖像。

cv2.imshow("edges", cv2.resize(edges, (640, 480)))
cv2.waitKey(0)
cv2.destroyAllWindows()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM