If your expectation is to obtain a single corner point at every line intersection, then the following is a simple approach.
Current scenario:
# visualize the corners
mask = np.zeros_like(gray)
mask[dst>0.01*dst.max()] = 255

In the above, there are many (supposedly) corner points close to each other.
Approach:
The idea now is to preserve only one point that is in close proximity to each other, while discarding the rest. To do so, I calculate the distance of each corner to every other and keep those that exceed a threshold.
# storing coordinate positions of all points in a list
coordinates = np.argwhere(mask)
coor_list = coordinates.tolist()
# points beyond this threshold are preserved
thresh = 20
# function to compute distance between 2 points
def distance(pt1, pt2):
(x1, y1), (x2, y2) = pt1, pt2
dist = math.sqrt( (x2 - x1)**2 + (y2 - y1)**2 )
return dist
#
coor_list_2 = coor_list.copy()
# iterate for every 2 points
i = 1
for pt1 in coor_list:
for pt2 in coor_list[i::1]:
if(distance(pt1, pt2) < thresh):
# to avoid removing a point if already removed
try:
coor_list_2.remove(pt2)
except:
pass
i+=1
# draw final corners
img2 = img.copy()
for pt in coor_list_2:
img2 = cv2.circle(img2, tuple(reversed(pt)), 3, (0, 0, 255), -1)

Suggestions:
To get more accurate result you can try finding the mean of all the points within a certain proximity. These would coincide close to the intersection of lines.