Как найти дороги на изображении, используя opencv python? - PullRequest
0 голосов
/ 31 августа 2018

У меня есть изображение аэрофотосъемки Аэрофотоснимок . Мне нужно использовать OpenCV и Python, чтобы найти дороги на нем. Я использовал сегментацию в пространстве HSV, чтобы избавиться от ненужных частей изображения, затем применил MorphologyEx и в итоге получил Изображение MorphologyEx . Что мне делать дальше, чтобы найти правильную дорогу на этом изображении?

Мой код:

while(True):
    ret, frame = cap.read()
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)

    imgHsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)

    mask = cv.inRange(imgHsv, (21, 0, 0), (35, 225, 225))

    imask = mask > 0

    roads = np.zeros_like(frame, np.uint8)

    roads[imask] = frame[imask]

    #bluredRoadsMask = cv.medianBlur(roads, 7)
    grayRoads = cv.cvtColor(roads, cv.COLOR_BGR2GRAY)
    phi = 1
    theta = 1
    maxIntensity = 255.0

    newImage = (maxIntensity/phi) * (grayRoads/(maxIntensity/theta))**2
    newImage = np.array(newImage, dtype=np.uint8)

    kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (7, 7))
    # cross = cv.getStructuringElement(cv.MORPH_CROSS, (3, 3))
    morphologyImg = cv.dilate(newImage, kernel, iterations=2)
    _, roadsThresh = cv.threshold(morphologyImg, 30, 225, cv.THRESH_BINARY)
    gaus_blur = cv.GaussianBlur(roadsThresh, (5, 5), 3, 3)
    erodeImg = cv.erode(gaus_blur, kernel, iterations=1)
    morphExImage = cv.morphologyEx(erodeImg, cv.MORPH_DILATE, kernel)


    roadsEdges = cv.Canny(morphExImage, 0, 0, apertureSize= 3)


    lines = cv.HoughLinesP(roadsEdges, 0.05, np.pi / 180, 0, 40, 1)
    # for x in range(0, len(lines)):
    #     for x1, y1, x2, y2 in lines[x]:
    #         cv.line(frame, (x1, y1), (x2, y2), (0, 0, 255), 3)


    # cv.imshow("roads", linesImage)
    cv.imshow("HSV Segmentation", morphExImage)
    # cv.imshow("grayFrame", gray)
    # cv.imshow("canny Edges", threshold)
    # cv.imshow("blur", bluredImage)
    cv.imshow("frame", frame)
    if cv.waitKey(1) & 0xFF == ord('q'):
         break

Спасибо за ответы!

обн .: Использовать преобразование Хафа Преобразование Хафа

...