If you want more of my pastes visit:  https://randompaste.000webhostapp.com/index.html
--------------------------------------------------------------------------------------
view my last post at:  https://bitbin.it/yQvdDbDd/
--------------------------------------------------------------------------------------

"""
    drawlines using kmeans to group
"""

import cv2
import numpy as np
from grabscreen import grab_screen
from sklearn.cluster import KMeans
import pyautogui
import time

BOX = (0, 40, 800, 640)
hood_y = 410
horizon_y = 270
VERTICES = np.array([[4, horizon_y], [800, horizon_y], [800, hood_y], [4, hood_y]])


def draw_lines(img, lines):
    try:
        for coords in lines:
            coords = np.array(coords, dtype='uint32')
            cv2.line(img,
                     (coords[0], coords[1]),
                     (coords[2], coords[3]),
                     [255, 255, 255], 5)
    except (TypeError, IndexError):
        pass


def roi(img, vertices):
    mask = np.zeros_like(img)
    cv2.fillPoly(mask, vertices, 255)
    masked = cv2.bitwise_and(img, mask)
    return masked


def process_img(processed_img):
    processed_img = cv2.Canny(processed_img, threshold1=100, threshold2=300)
    processed_img = roi(processed_img, [VERTICES])
    processed_img = cv2.GaussianBlur(processed_img, (5, 5), 0)
    lines = cv2.HoughLinesP(processed_img, 1, np.pi / 180, 180, np.array([]), 140, 20)
    try:
        nlines = np.array([l[0] for l in lines])
        kmeans = KMeans(n_clusters=2, random_state=0).fit(nlines)
        draw_lines(processed_img, kmeans.cluster_centers_)
    except TypeError:
        pass
    finally:
        return processed_img


def main():
    while True:
        ti = time.time()
        screen = grab_screen(region=BOX)
        new_screen = process_img(screen)
        print('{:.2f} FPS'.format(1 / (time.time() - ti)))
        cv2.imshow('window', new_screen)

        if cv2.waitKey(25) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            break


if __name__ == '__main__':
    main()