import cv2 import numpy as np
img = cv2.imread('Bluelinegap50blur.jpg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) edges = cv2.Canny(img, 50, 200)
find lines
rho = 1 theta = np.pi / 180 threshold = 10 min_line_length = 0 max_line_gap = 10 line_image = np.copy(edges) * 0 lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]), min_line_length, max_line_gap)
draw found lines
img_dst = cv2.cvtColor(gray,cv2.COLOR_GRAY2RGB) for line in lines[0]: cv2.line(img_dst, (line[0], line[1]), (line[2], line[3]), (0,255,0), 2)
find corners
gray = np.float32(gray) dst = cv2.cornerHarris(gray, 15, 5, 0.04)
non-maximum suppression via dilation
kernel = np.ones((10,10))
max_dst = cv2.dilate(dst, kernel)
dst = dst * (dst == max_dst)
sort points by strength, find their positions and take 5 highest ones
sortIdx = np.argsort(dst.flatten())[::-1][:5]
draw them
w = img.shape[1]
for idx in sortIdx: cv2.circle(img_dst,(idx % w, idx / w) , 3, (0,0,255), -1)