houghlinesp和阈值
houghlinesp and thresholding
我正在使用 opencv Houghlinesp 来检测停车场中的线路。这是源图像
当我做了霍夫变换-p 来检测线条时,我得到了这样的最终图像。
它确实检测到空格。知道如何去除汽车顶部的这些嘈杂线路吗?或高度赞赏替代算法或方法的任何方向。
img = cv.imread('Parking-Lot.jpg')
threshold=100
minLineLength = 60
rho=2
maxLineGap=20
theta = np.pi/180
edges = cv.Canny(img, 100, 200)
lines = cv.HoughLinesP(edges, rho, theta, threshold, np.array([]), minLineLength =minLineLength , maxLineGap=maxLineGap)
for i in range(len(lines)):
for line in lines[i]:
cv.line(img, (line[0],line[1]), (line[2],line[3]), (0,255,0), 2)
cv2.imwrite("lines.jpg", img)
在应用边缘检测之前,您可以通过对图像设置阈值来消除大部分噪声。这样你就可以移除(大部分)汽车并保留你感兴趣的 space 白线:
import cv2
import numpy as np
img = cv2.imread('Parking-Lot.jpg')
threshold=100
minLineLength = 60
rho=2
maxLineGap=20
theta = np.pi/180
# here you convert the image to grayscale and then threshhold to binary
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,180,255,cv2.THRESH_BINARY)
# continue with the threshholded image instead
edges = cv2.Canny(thresh, 100, 200)
lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]), minLineLength =minLineLength , maxLineGap=maxLineGap)
for i in range(len(lines)):
for line in lines[i]:
cv2.line(img, (line[0],line[1]), (line[2],line[3]), (0,255,0), 2)
cv2.imwrite("lines.jpg", img)
这会给您带来更清晰的结果:
随意尝试阈值参数;您将需要找到一个阈值来排除大部分汽车,同时保留您想要检测的所有线路。
我正在使用 opencv Houghlinesp 来检测停车场中的线路。这是源图像
当我做了霍夫变换-p 来检测线条时,我得到了这样的最终图像。
它确实检测到空格。知道如何去除汽车顶部的这些嘈杂线路吗?或高度赞赏替代算法或方法的任何方向。
img = cv.imread('Parking-Lot.jpg')
threshold=100
minLineLength = 60
rho=2
maxLineGap=20
theta = np.pi/180
edges = cv.Canny(img, 100, 200)
lines = cv.HoughLinesP(edges, rho, theta, threshold, np.array([]), minLineLength =minLineLength , maxLineGap=maxLineGap)
for i in range(len(lines)):
for line in lines[i]:
cv.line(img, (line[0],line[1]), (line[2],line[3]), (0,255,0), 2)
cv2.imwrite("lines.jpg", img)
在应用边缘检测之前,您可以通过对图像设置阈值来消除大部分噪声。这样你就可以移除(大部分)汽车并保留你感兴趣的 space 白线:
import cv2
import numpy as np
img = cv2.imread('Parking-Lot.jpg')
threshold=100
minLineLength = 60
rho=2
maxLineGap=20
theta = np.pi/180
# here you convert the image to grayscale and then threshhold to binary
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,180,255,cv2.THRESH_BINARY)
# continue with the threshholded image instead
edges = cv2.Canny(thresh, 100, 200)
lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]), minLineLength =minLineLength , maxLineGap=maxLineGap)
for i in range(len(lines)):
for line in lines[i]:
cv2.line(img, (line[0],line[1]), (line[2],line[3]), (0,255,0), 2)
cv2.imwrite("lines.jpg", img)
这会给您带来更清晰的结果:
随意尝试阈值参数;您将需要找到一个阈值来排除大部分汽车,同时保留您想要检测的所有线路。