1
+ import numpy as np
2
+ import cv2
3
+ import time
4
+ import subprocess
5
+
6
+ def main ():
7
+ max_count = 18
8
+ delay = 5
9
+ count = 0
10
+ start = time .time ()
11
+
12
+ SIDE = True
13
+ TOP = True
14
+
15
+ boardSize = (9 , 7 )
16
+
17
+ IMG_PATH = '/home/jgschornak/NeedleGuidance/images_converging_cams/'
18
+
19
+ bashCommand = 'v4l2-ctl -d /dev/video1 -c focus_auto=0'
20
+ process = subprocess .Popen (bashCommand .split (), stdout = subprocess .PIPE )
21
+ cv2 .waitKey (100 )
22
+ bashCommand = 'v4l2-ctl -d /dev/video1 -c focus_absolute=20'
23
+ process1 = subprocess .Popen (bashCommand .split (), stdout = subprocess .PIPE )
24
+ cv2 .waitKey (100 )
25
+ bashCommand = 'v4l2-ctl -d /dev/video2 -c focus_auto=0'
26
+ process2 = subprocess .Popen (bashCommand .split (), stdout = subprocess .PIPE )
27
+ cv2 .waitKey (100 )
28
+ bashCommand = 'v4l2-ctl -d /dev/video2 -c focus_absolute=30'
29
+ process3 = subprocess .Popen (bashCommand .split (), stdout = subprocess .PIPE )
30
+ cv2 .waitKey (100 )
31
+
32
+ top = cv2 .VideoCapture (1 )
33
+ side = cv2 .VideoCapture (2 )
34
+
35
+ ret , frame = top .read ()
36
+ height , width , channels = frame .shape
37
+
38
+ calibration = np .load ('calibration.npz' )
39
+
40
+ # P1 = calibration['P1']
41
+ # P2 = calibration['P2']
42
+
43
+ top_camera_matrix = calibration ['CameraMatrix1' ]
44
+ top_dist_coefs = calibration ['DistCoeffs1' ]
45
+
46
+ side_camera_matrix = calibration ['CameraMatrix2' ]
47
+ side_dist_coefs = calibration ['DistCoeffs2' ]
48
+
49
+ tvec_top = None
50
+ tvec_side = None
51
+ rvec_top = None
52
+ rvec_side = None
53
+ rmat_top = None
54
+ rmat_side = None
55
+
56
+ top_homogeneous = np .eye (4 )
57
+ side_homogeneous = np .eye (4 )
58
+
59
+ squareSize = 5.5
60
+ pattern_points = np .zeros ((np .prod (boardSize ), 3 ), np .float32 )
61
+ pattern_points [:, :2 ] = np .indices (boardSize ).T .reshape (- 1 , 2 )
62
+ pattern_points *= squareSize
63
+
64
+ start_vec = np .array ([0 ,0 ,0 ,1 ]).reshape (- 1 ,1 )
65
+
66
+ while True :
67
+ if TOP :
68
+ ret , top_frame = top .read ()
69
+ top_frame = cv2 .cvtColor (top_frame , cv2 .COLOR_BGR2GRAY )
70
+ found_top , corners_top = cv2 .findChessboardCorners (top_frame , boardSize )
71
+ vis_top = cv2 .cvtColor (top_frame , cv2 .COLOR_GRAY2BGR )
72
+ if found_top :
73
+ cv2 .drawChessboardCorners (vis_top , boardSize , corners_top , found_top )
74
+ ret , rvec_top , tvec_top = cv2 .solvePnP (pattern_points , corners_top , top_camera_matrix , top_dist_coefs )
75
+ rmat_top , jac = cv2 .Rodrigues (rvec_top )
76
+
77
+ top_homogeneous [:3 ,:3 ] = rmat_top
78
+ top_homogeneous [:3 ,3 :4 ] = tvec_top .reshape (3 ,- 1 )
79
+ cv2 .imshow ("top" , vis_top )
80
+ print ('t_top' , tvec_top )
81
+ print ('homo_top' , top_homogeneous )
82
+
83
+ if SIDE :
84
+ ret , side_frame = side .read ()
85
+ side_frame = cv2 .cvtColor (side_frame , cv2 .COLOR_BGR2GRAY )
86
+ found_side , corners_side = cv2 .findChessboardCorners (side_frame , boardSize )
87
+ vis_side = cv2 .cvtColor (side_frame , cv2 .COLOR_GRAY2BGR )
88
+ if found_side :
89
+ cv2 .drawChessboardCorners (vis_side , boardSize , corners_side , found_side )
90
+ ret , rvec_side , tvec_side = cv2 .solvePnP (pattern_points , corners_side , side_camera_matrix , side_dist_coefs )
91
+ rmat_side , jac = cv2 .Rodrigues (rvec_side )
92
+
93
+ side_homogeneous [:3 ,:3 ] = rmat_side
94
+ side_homogeneous [:3 ,3 :4 ] = tvec_side .reshape (3 ,- 1 )
95
+ cv2 .imshow ("side" , vis_side )
96
+ print ('t_side' , tvec_side )
97
+ print ('homo_side' , side_homogeneous )
98
+
99
+
100
+
101
+
102
+
103
+ if TOP and SIDE :
104
+ product = np .dot (top_homogeneous ,start_vec )
105
+ # product = np.transpose(start_vec)*top_homogeneous
106
+ # print(start_vec)
107
+ # print('translation', product)
108
+
109
+ cumulative = np .dot (side_homogeneous , np .linalg .inv (top_homogeneous ))
110
+ # cum_translation = np.dot(cumulative, start_vec)
111
+ # print('cumulative', cumulative)
112
+ # print('cum trans', cum_translation/cum_translation[3,:])
113
+
114
+ R = cumulative [:3 ,:3 ]
115
+ T = cumulative [:3 ,3 :4 ]
116
+
117
+ # F = cv2.findFundamentalMatrix(corners_top, corners_side)
118
+
119
+
120
+ if cv2 .waitKey (1 ) & 0xFF == ord ('t' ):
121
+ if TOP :
122
+ filename1 = IMG_PATH + 'top' + str (count ) + '.jpg'
123
+ cv2 .imwrite (filename1 , top_frame )
124
+ print ('Saved still as: ' + filename1 )
125
+
126
+ if SIDE :
127
+ filename2 = IMG_PATH + 'side' + str (count ) + '.jpg'
128
+ cv2 .imwrite (filename2 , side_frame )
129
+ print ('Saved still as: ' + filename2 )
130
+ count = count + 1
131
+ # np.savez_compressed('camera_transform.npz',R=R, T=T)
132
+ # print("Saved transform!")
133
+
134
+ if cv2 .waitKey (1 ) & 0xFF == ord ('q' ):
135
+ break
136
+ top .release ()
137
+ side .release ()
138
+
139
+
140
+ if __name__ == '__main__' :
141
+ main ()
0 commit comments