Ask Your Question
0

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?

Code:

import numpy as np

import cv2

img=cv2.imread('trial1.jpg')

h,w,l=img.shape

res=cv2.resize(img,(w/4,h/4),interpolation=cv2.INTER_LINEAR)

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

gray = np.float32(gray)

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

cv2.imwrite('dsttest.jpg',dst)


dst = cv2.dilate(dst,None)


res[dst>0.01*dst.max()]=[0,0,255]

points=np.unravel_index(dst.argmax(),dst.shape)

print list(points)

cv2.imwrite('dst.jpg',res)

cv2.waitKey(0)

cv2.destroyAllWindows()
edit retag flag offensive close merge delete

Comments

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
0

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...........http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_features_harris/py_features_harris.html

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]

cv2.imwrite('subpixel5.png',img)

edit flag offensive delete link more
Login/Signup to Answer

Question Tools

1 follower

Stats

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

Seen: 379 times

Last updated: Mar 13