Ask Your Question

I have to find the homography that best warps the images into the same perspective.

asked 2016-06-11 10:07:59 -0500

sakshi gravatar image

I have used RANSAC algorithm to find the homography and wrap perspective operation to apply it to an image. here is the code

img1 = cv2.imread('bus1.jpg',0)
img2 = cv2.imread('bus2.jpg',0)
sift = cv2.SIFT()

kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)

index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks = 50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1,des2,k=2)

good = []
for m,n in matches:
if m.distance < 0.7*n.distance:

if len(good)>MIN_MATCH_COUNT:

  src_pts = np.float32([ kp1[m.queryIdx].pt for m in good ]).reshape(-1,1,2)
  dst_pts = np.float32([ kp2[m.trainIdx].pt for m in good ]).reshape(-1,1,2)

  M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
  h,w = img1.shape



the input images are

image descriptionbus1.jpg image descriptionbus2.jpg the output image is

image description

it is not showing the whole image .what is wrong??

edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted

answered 2016-06-11 12:08:26 -0500

Tetragramm gravatar image

First, you need to add the flag WARP_INVERSE, because you are moving your image in the wrong direction.

Secondly, warpPerspective requires you to specify the size of the output, and the top left is always at (0,0). So if you warp things to negative pixel values, you have to alter the transformation to shift it in the x or y direction (.at<double>(0,2) and (1,2) respectively) so it is in the positive pixel ranges.

edit flag offensive delete link more

Question Tools

1 follower


Asked: 2016-06-11 10:07:59 -0500

Seen: 523 times

Last updated: Jun 11 '16