如何使用openCV检测卫星航拍图像中的街道线?
How to detect street lines in satellite aerial image using openCV?
我是 openCV 的新手,我必须检测卫星图像中的街道线
这是原图
我应用了不同的阈值,我能够区分背景和 fg
retval, threshold = cv2.threshold(img1,150, 255, cv2.THRESH_BINARY)
plt.imshow(threshold)
在此之后,我进行了平滑以去除 HoughLines 的噪声
# Initialize output
out = cv2.cvtColor(threshold, cv2.COLOR_GRAY2BGR)
# Median blurring to get rid of the noise; invert image
threshold_blur = 255 - cv2.medianBlur(threshold, 5)
plt.imshow(threshold_blur,cmap='gray', vmin = 0, vmax = 255)
现在,当我应用 hough 线时,我得到了这个
# Detect and draw lines
lines = cv2.HoughLinesP(threshold_blur, 1, np.pi/180, 10, minLineLength=10, maxLineGap=100)
for line in lines:
for x1, y1, x2, y2 in line:
cv2.line(out, (x1, y1), (x2, y2), (0, 0, 255), 2)
plt.imshow(出局)
我需要这样的台词
为什么它不起作用,我该怎么办?
不确定您是否只想使用 openCV 来执行此操作,您可能还想使用类似 tensorflow 的东西。
但是如果你只想使用 openCV,这里有几个选项:
您可以尝试 dilate and erode. And use findContours,并循环遍历这些轮廓以找到具有特定最小长度的对象,并使用它来创建从 A 到 B 的直线。
另一种解决方案是训练 cascade 来检测图像中的街道部分并将这些点连接起来。不过,这会花费更多时间。
我是 openCV 的新手,我必须检测卫星图像中的街道线
这是原图
我应用了不同的阈值,我能够区分背景和 fg
retval, threshold = cv2.threshold(img1,150, 255, cv2.THRESH_BINARY)
plt.imshow(threshold)
在此之后,我进行了平滑以去除 HoughLines 的噪声
# Initialize output
out = cv2.cvtColor(threshold, cv2.COLOR_GRAY2BGR)
# Median blurring to get rid of the noise; invert image
threshold_blur = 255 - cv2.medianBlur(threshold, 5)
plt.imshow(threshold_blur,cmap='gray', vmin = 0, vmax = 255)
现在,当我应用 hough 线时,我得到了这个
# Detect and draw lines
lines = cv2.HoughLinesP(threshold_blur, 1, np.pi/180, 10, minLineLength=10, maxLineGap=100)
for line in lines:
for x1, y1, x2, y2 in line:
cv2.line(out, (x1, y1), (x2, y2), (0, 0, 255), 2)
plt.imshow(出局)
我需要这样的台词
为什么它不起作用,我该怎么办?
不确定您是否只想使用 openCV 来执行此操作,您可能还想使用类似 tensorflow 的东西。
但是如果你只想使用 openCV,这里有几个选项:
您可以尝试 dilate and erode. And use findContours,并循环遍历这些轮廓以找到具有特定最小长度的对象,并使用它来创建从 A 到 B 的直线。
另一种解决方案是训练 cascade 来检测图像中的街道部分并将这些点连接起来。不过,这会花费更多时间。