[英]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)
看來這只是圖片的一部分,但我不知道問題出在哪里。
根據 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.