Ask Your Question

To find the coordinates of corners detected by Harris corner detection

asked 2018-03-12 10:58:13 -0500

csthakur gravatar image

updated 2018-03-12 14:24:46 -0500

berak gravatar image

I have applied harris corner detection on the following image Input Image

and obtained the result as Image after Harris corner detection

and now i want to find the coordinates of these corner pixels marked in red how do i do so?


import numpy as np

import cv2




gray = cv2.cvtColor(res,cv2.COLOR_BGR2GRAY)

gray = np.float32(gray)

dst = cv2.cornerHarris(gray,2,3,0.04)


dst = cv2.dilate(dst,None)



print list(points)



edit retag flag offensive close merge delete


I want to be able to find out the coordinates of the corner points, the points in red aren't going to give me a single pixel value since each of them comprise of several pixels.I need this information so that i can automatically separate the image into it's constituent squares by using numpy array slicing

csthakur gravatar imagecsthakur ( 2018-03-12 14:32:34 -0500 )edit

first of all, don't dilate the dst image. from there on it's basically non-maximum-suppression

(and probably you need a higher threshold value)

or use goodFeaturesToTrack() instead ?

berak gravatar imageberak ( 2018-03-12 15:20:36 -0500 )edit

1 answer

Sort by ยป oldest newest most voted

answered 2018-03-13 00:39:03 -0500

saideepthik gravatar image

import cv2 import numpy as np

filename = 'chessboard2.jpg' img = cv2.imread(filename) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

find Harris corners

gray = np.float32(gray) dst = cv2.cornerHarris(gray,2,3,0.04) dst = cv2.dilate(dst,None) ret, dst = cv2.threshold(dst,0.01*dst.max(),255,0) dst = np.uint8(dst)

find centroids

ret, labels, stats, centroids = cv2.connectedComponentsWithStats(dst)

define the criteria to stop and refine the corners

criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001) corners = cv2.cornerSubPix(gray,np.float32(centroids),(5,5),(-1,-1),criteria) print corners #here u can get corners check for more information follow the link...........

Now draw them

res = np.hstack((centroids,corners)) res = np.int0(res) img[res[:,1],res[:,0]]=[0,0,255] img[res[:,3],res[:,2]] = [0,255,0]


edit flag offensive delete link more
Login/Signup to Answer

Question Tools

1 follower


Asked: 2018-03-12 10:58:13 -0500

Seen: 379 times

Last updated: Mar 13