annotate scripts/compute-homography.py @ 572:9c429c7efe89

added script to generate undistorted images from video
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 12 Aug 2014 15:33:03 -0400
parents bd1ad468e928
children aded6c1c2ebd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
151
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
1 #! /usr/bin/env python
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
2
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
3 import sys, argparse
151
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
4
238
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
5 import matplotlib.pyplot as plt
151
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
6 import numpy as np
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
7 import cv2
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
8
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
9 import cvutils
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
10 import utils
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
11
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
12 parser = argparse.ArgumentParser(description='The program computes the homography matrix from at least 4 non-colinear point correspondences inputed in the same order in a video frame and a aerial photo/ground map, or from the list of corresponding points in the two planes.', epilog = '''The point correspondence file contains at least 4 non-colinear point coordinates
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
13 with the following format:
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
14 - the first two lines are the x and y coordinates in the projected space (usually world space)
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
15 - the last two lines are the x and y coordinates in the origin space (usually image space)
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
16
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
17 If providing video and world images, with a number of points to input
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
18 and a ration to convert pixels to world distance unit (eg meters per pixel),
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
19 the images will be shown in turn and the user should click
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
20 in the same order the corresponding points in world and image spaces.''', formatter_class=argparse.RawDescriptionHelpFormatter,)
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
21
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
22 parser.add_argument('-p', dest = 'pointCorrespondencesFilename', help = 'name of the text file containing the point correspondences')
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
23 parser.add_argument('-i', dest = 'videoFrameFilename', help = 'filename of the video frame')
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
24 parser.add_argument('-w', dest = 'worldFilename', help = 'filename of the aerial photo/ground map')
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
25 parser.add_argument('-n', dest = 'nPoints', help = 'number of corresponding points to input', default = 4, type = int)
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
26 parser.add_argument('-u', dest = 'unitsPerPixel', help = 'number of units per pixel', default = 1., type = float)
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
27 parser.add_argument('--display', dest = 'displayPoints', help = 'display original and projected points on both images', action = 'store_true')
510
b0dac840c24f compute homography works with undistortion
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 478
diff changeset
28 parser.add_argument('--intrinsic', dest = 'intrinsicCameraMatrixFilename', help = 'name of the intrinsic camera file')
b0dac840c24f compute homography works with undistortion
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 478
diff changeset
29 parser.add_argument('--distortion-coefficients', dest = 'distortionCoefficients', help = 'distortion coefficients', nargs = '*', type = float)
b0dac840c24f compute homography works with undistortion
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 478
diff changeset
30 parser.add_argument('--undistorted-multiplication', dest = 'undistortedImageMultiplication', help = 'undistorted image multiplication', type = float)
538
bd1ad468e928 corrected bug and added capability to save undistorted image
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 510
diff changeset
31 parser.add_argument('--undistort', dest = 'undistort', help = 'undistort the video (because features have been extracted that way', action = 'store_true')
bd1ad468e928 corrected bug and added capability to save undistorted image
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 510
diff changeset
32 parser.add_argument('--save', dest = 'saveImages', help = 'save the undistorted video frame (display option must be chosen)', action = 'store_true')
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
33
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
34 args = parser.parse_args()
151
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
35
217
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
36 # TODO process camera intrinsic and extrinsic parameters to obtain image to world homography, taking example from Work/src/python/generate-homography.py script
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
37 # cameraMat = load(videoFilenamePrefix+'-camera.txt');
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
38 # T1 = cameraMat[3:6,:].copy();
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
39 # A = cameraMat[0:3,0:3].copy();
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
40
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
41 # # pay attention, rotation may be the transpose
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
42 # # R = T1[:,0:3].T;
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
43 # R = T1[:,0:3];
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
44 # rT = dot(R, T1[:,3]/1000);
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
45 # T = zeros((3,4),'f');
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
46 # T[:,0:3] = R[:];
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
47 # T[:,3] = rT;
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
48
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
49 # AT = dot(A,T);
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
50
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
51 # nPoints = 4;
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
52 # worldPoints = cvCreateMat(nPoints, 3, CV_64FC1);
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
53 # imagePoints = cvCreateMat(nPoints, 3, CV_64FC1);
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
54
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
55 # # extract homography from the camera calibration
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
56 # worldPoints = cvCreateMat(4, 3, CV_64FC1);
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
57 # imagePoints = cvCreateMat(4, 3, CV_64FC1);
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
58
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
59 # worldPoints[0,:] = [[1, 1, 0]];
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
60 # worldPoints[1,:] = [[1, 2, 0]];
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
61 # worldPoints[2,:] = [[2, 1, 0]];
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
62 # worldPoints[3,:] = [[2, 2, 0]];
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
63
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
64 # wPoints = [[1,1,2,2],
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
65 # [1,2,1,2],
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
66 # [0,0,0,0]];
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
67 # iPoints = utils.worldToImage(AT, wPoints);
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
68
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
69 # for i in range(nPoints):
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
70 # imagePoints[i,:] = [iPoints[:,i].tolist()];
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
71
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
72 # H = cvCreateMat(3, 3, CV_64FC1);
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
73
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
74 # cvFindHomography(imagePoints, worldPoints, H);
ba71924cadf5 added comment/TODO
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 160
diff changeset
75
151
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
76
238
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
77 homography = np.array([])
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
78 if args.pointCorrespondencesFilename != None:
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
79 worldPts, videoPts = cvutils.loadPointCorrespondences(args.pointCorrespondencesFilename)
238
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
80 homography, mask = cv2.findHomography(videoPts, worldPts) # method=0, ransacReprojThreshold=3
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
81 elif args.videoFrameFilename != None and args.worldFilename != None:
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
82 worldImg = plt.imread(args.worldFilename)
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
83 videoImg = plt.imread(args.videoFrameFilename)
510
b0dac840c24f compute homography works with undistortion
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 478
diff changeset
84 if args.undistort:
b0dac840c24f compute homography works with undistortion
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 478
diff changeset
85 [map1, map2] = cvutils.computeUndistortMaps(videoImg.shape[1], videoImg.shape[0], args.undistortedImageMultiplication, np.loadtxt(args.intrinsicCameraMatrixFilename), args.distortionCoefficients)
b0dac840c24f compute homography works with undistortion
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 478
diff changeset
86 videoImg = cv2.remap(videoImg, map1, map2, interpolation=cv2.INTER_LINEAR)
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
87 print('Click on {0} points in the video frame'.format(args.nPoints))
238
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
88 plt.figure()
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
89 plt.imshow(videoImg)
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
90 videoPts = np.array(plt.ginput(args.nPoints, timeout=3000))
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
91 print('Click on {0} points in the world image'.format(args.nPoints))
238
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
92 plt.figure()
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
93 plt.imshow(worldImg)
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
94 worldPts = args.unitsPerPixel*np.array(plt.ginput(args.nPoints, timeout=3000))
238
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
95 plt.close('all')
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
96 homography, mask = cv2.findHomography(videoPts, worldPts)
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
97 # save the points in file
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
98 f = open('point-correspondences.txt', 'a')
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
99 np.savetxt(f, worldPts.T)
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
100 np.savetxt(f, videoPts.T)
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
101 f.close()
151
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
102
238
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
103 if homography.size>0:
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
104 np.savetxt('homography.txt',homography)
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
105
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
106 if args.displayPoints and args.videoFrameFilename != None and args.worldFilename != None and homography.size>0:
478
d337bffd7283 Display of points in compute homography and step option to replay videos
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
107 worldImg = cv2.imread(args.worldFilename)
d337bffd7283 Display of points in compute homography and step option to replay videos
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
108 videoImg = cv2.imread(args.videoFrameFilename)
572
9c429c7efe89 added script to generate undistorted images from video
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 538
diff changeset
109 if args.undistort:
510
b0dac840c24f compute homography works with undistortion
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 478
diff changeset
110 [map1, map2] = cvutils.computeUndistortMaps(videoImg.shape[1], videoImg.shape[0], args.undistortedImageMultiplication, np.loadtxt(args.intrinsicCameraMatrixFilename), args.distortionCoefficients)
b0dac840c24f compute homography works with undistortion
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 478
diff changeset
111 videoImg = cv2.remap(videoImg, map1, map2, interpolation=cv2.INTER_LINEAR)
538
bd1ad468e928 corrected bug and added capability to save undistorted image
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 510
diff changeset
112 if args.saveImages:
bd1ad468e928 corrected bug and added capability to save undistorted image
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 510
diff changeset
113 cv2.imwrite(utils.removeExtension(args.videoFrameFilename)+'-undistorted.png', videoImg)
151
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
114 invHomography = np.linalg.inv(homography)
238
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
115 projectedWorldPts = cvutils.projectArray(invHomography, worldPts.T).T
478
d337bffd7283 Display of points in compute homography and step option to replay videos
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
116 projectedVideoPts = cvutils.projectArray(homography, videoPts.T).T
238
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
117 for i in range(worldPts.shape[0]):
478
d337bffd7283 Display of points in compute homography and step option to replay videos
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
118 # world image
d337bffd7283 Display of points in compute homography and step option to replay videos
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
119 cv2.circle(worldImg,tuple(np.int32(np.round(worldPts[i]/args.unitsPerPixel))),2,cvutils.cvBlue)
476
6551a3cf1750 modified compute-homography to work with argparse
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 443
diff changeset
120 cv2.circle(worldImg,tuple(np.int32(np.round(projectedVideoPts[i]/args.unitsPerPixel))),2,cvutils.cvRed)
478
d337bffd7283 Display of points in compute homography and step option to replay videos
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
121 cv2.putText(worldImg, str(i+1), tuple(np.int32(np.round(worldPts[i]/args.unitsPerPixel))+5), cv2.FONT_HERSHEY_PLAIN, 2., cvutils.cvBlue, 2)
d337bffd7283 Display of points in compute homography and step option to replay videos
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
122 # video image
d337bffd7283 Display of points in compute homography and step option to replay videos
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
123 cv2.circle(videoImg,tuple(np.int32(np.round(videoPts[i]))),2,cvutils.cvBlue)
d337bffd7283 Display of points in compute homography and step option to replay videos
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
124 cv2.circle(videoImg,tuple(np.int32(np.round(projectedWorldPts[i]))),2,cvutils.cvRed)
d337bffd7283 Display of points in compute homography and step option to replay videos
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
125 cv2.putText(videoImg, str(i+1), tuple(np.int32(np.round(videoPts[i])+5)), cv2.FONT_HERSHEY_PLAIN, 2., cvutils.cvBlue, 2)
238
be3761a09b20 added functions to input point correspondences
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 237
diff changeset
126 cv2.imshow('video frame',videoImg)
478
d337bffd7283 Display of points in compute homography and step option to replay videos
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 476
diff changeset
127 cv2.imshow('world image',worldImg)
151
4af774bb186d wrote a simple script to compute homography from point correspondences and display the reprojection for visual verification
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
128 cv2.waitKey()
346
5f75d6c23ed5 added opencv function to destroy OpenCV windows (seems to work only on Windows)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 334
diff changeset
129 cv2.destroyAllWindows()