def calibrationExample(): camNum =0 # The number of the camera to calibrate nPoints = 5 # number of images used for the calibration (space presses) patternSize=(9,6) #size of the calibration pattern #saveImage = 'calibrationShoots' #calibrated, camera_matrix,dist_coefs,rms = SIGBTools.calibrateCamera(camNum,nPoints,patternSize,saveImage) #np.save('PMatrix', camera_matrix) #np.save('distCoef',dist_coefs) camera_matrix = np.load('Results/PMatrix.npy') dist_coefs = np.load('Results/distCoef.npy') calibrated = True K = camera_matrix cam1 = SIGBTools.Camera( np.hstack((K,np.dot(K,np.array([[0],[0],[-1]])) )) ) cam1.factor() #Factor projection matrix into intrinsic and extrinsic parameters print "K=",cam1.K print "R=", cam1.R print "t",cam1.t if (calibrated): capture = cv2.VideoCapture(camNum) running = True while running: running, img =capture.read() imgGray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ch = cv2.waitKey(1) if(ch==27) or (ch==ord('q')): #ESC running = False img=cv2.undistort(img, camera_matrix, dist_coefs ) found,corners=cv2.findChessboardCorners(imgGray, patternSize ) if (found!=0): cv2.drawChessboardCorners(img, patternSize, corners,found) cv2.imshow("Calibrated",img)
def AugumentSequence(): #Loading callibration matrix K = np.load('Results/PMatrix.npy') #setting pattern size pattern_size = (9,6) #loading calibration images L_CP = cv2.imread('Results/L_CPSeq.jpg') #Frontal view #Getting cube points from cubePoints.py cubePoints = cube.cube_points([0,0,0.1],0.1) #Getting chesscorners for frontal view Fgray = cv2.cvtColor(L_CP,cv2.COLOR_BGR2GRAY) Ffound, Fcorners = cv2.findChessboardCorners(Fgray, pattern_size) FchessCorners = [(Fcorners[0,0,0],Fcorners[0,0,1]),(Fcorners[8,0,0],Fcorners[8,0,1]),(Fcorners[45,0,0],Fcorners[45,0,1]),(Fcorners[53,0,0],Fcorners[53,0,1])] #To open CV format FchessCorners = np.array([[x,y] for (x,y) in FchessCorners]) #Getting chesscorners for the sequence images cap = cv2.VideoCapture(0) running, I = cap.read() #Get camera model for first view cam1 = SIGBTools.Camera(hstack((K,dot(K,array([[0],[0],[-1]])) )) ) #imSize = np.shape(I) #videoWriter = cv2.VideoWriter("sequence.mp4", cv.FOURCC('D','I','V','X'), 30,(imSize[1], imSize[0]),True) while(running): running, I = cap.read() #converting to gray for better contrast gray = cv2.cvtColor(I,cv2.COLOR_BGR2GRAY) found, corners = cv2.findChessboardCorners(gray, pattern_size) if (found): #picking utmost corners IchessCorners = [(corners[0,0,0],corners[0,0,1]),(corners[8,0,0],corners[8,0,1]),(corners[45,0,0],corners[45,0,1]),(corners[53,0,0],corners[53,0,1])] #To openCV format IchessCorners = np.array([[x,y] for (x,y) in IchessCorners]) #Find homography between frontal image and current frame H,mask = cv2.findHomography(FchessCorners, IchessCorners) #Transofrm camera view camFrame = SIGBTools.Camera(dot(H,cam1.P)) A = dot(linalg.inv(K),camFrame.P[:,:3]) A = array([A[:,0],A[:,1],cross(A[:,0],A[:,1])]).T camFrame.P[:,:3] = dot(K,A) #Get cube projection points box_peojection = camFrame.project(SIGBTools.toHomogenious(cubePoints)) #Draw box p = box_peojection ''' Drawing the box manually ''' #bottom cv2.line(I, (int(p[0][1]), int(p[1][1])), (int(p[0][2]),int(p[1][2])),(255,255,0),2) cv2.line(I, (int(p[0][2]), int(p[1][2])), (int(p[0][3]),int(p[1][3])),(255,255,0),2) cv2.line(I, (int(p[0][3]), int(p[1][3])), (int(p[0][4]),int(p[1][4])),(255,255,0),2) cv2.line(I, (int(p[0][1]), int(p[1][1])), (int(p[0][4]),int(p[1][4])),(255,255,0),2) #connecting lines cv2.line(I, (int(p[0][4]), int(p[1][4])), (int(p[0][5]),int(p[1][5])),(255,255,0),2) cv2.line(I, (int(p[0][1]), int(p[1][1])), (int(p[0][6]),int(p[1][6])),(255,255,0),2) cv2.line(I, (int(p[0][2]), int(p[1][2])), (int(p[0][7]),int(p[1][7])),(255,255,0),2) cv2.line(I, (int(p[0][3]), int(p[1][3])), (int(p[0][8]),int(p[1][8])),(255,255,0),2) #top cv2.line(I, (int(p[0][5]), int(p[1][5])), (int(p[0][6]),int(p[1][6])),(255,255,0),2) cv2.line(I, (int(p[0][6]), int(p[1][6])), (int(p[0][7]),int(p[1][7])),(255,255,0),2) cv2.line(I, (int(p[0][7]), int(p[1][7])), (int(p[0][8]),int(p[1][8])),(255,255,0),2) cv2.line(I, (int(p[0][8]), int(p[1][8])), (int(p[0][9]),int(p[1][9])),(255,255,0),2) cv2.imshow('Augumentation',I) cv2.waitKey(1) return
def AugumentImages(): #Loading callibration matrix K = np.load('Results/PMatrix.npy') #setting pattern size pattern_size = (9,6) #loading calibration images L_CP = cv2.imread('Results/L_CP.jpg') #Frontal view #Getting cube points from cubePoints.py cubePoints = cube.cube_points([0,0,0.1],0.1) I1 = cv2.imread('Results/calibrationShoots1.jpg') I2 = cv2.imread('Results/calibrationShoots2.jpg') I3 = cv2.imread('Results/calibrationShoots3.jpg') I4 = cv2.imread('Results/calibrationShoots4.jpg') I5 = cv2.imread('Results/calibrationShoots5.jpg') Images = [I1, I2, I3, I4 ,I5] ImageH = [] #homographies from frontal view to H respectively #Getting chesscorners for frontal view Fgray = cv2.cvtColor(L_CP,cv2.COLOR_BGR2GRAY) Ffound, Fcorners = cv2.findChessboardCorners(Fgray, pattern_size) FchessCorners = [(Fcorners[0,0,0],Fcorners[0,0,1]),(Fcorners[8,0,0],Fcorners[8,0,1]),(Fcorners[45,0,0],Fcorners[45,0,1]),(Fcorners[53,0,0],Fcorners[53,0,1])] #To open CV format FchessCorners = np.array([[x,y] for (x,y) in FchessCorners]) #Getting chesscorners for the rest of pics for I in Images: #converting to gray for better contrast gray = cv2.cvtColor(I,cv2.COLOR_BGR2GRAY) #finding all corners on chessboard found, corners = cv2.findChessboardCorners(gray, pattern_size) #picking utmost corners IchessCorners = [(corners[0,0,0],corners[0,0,1]),(corners[8,0,0],corners[8,0,1]),(corners[45,0,0],corners[45,0,1]),(corners[53,0,0],corners[53,0,1])] #To openCV format IchessCorners = np.array([[x,y] for (x,y) in IchessCorners]) H,mask = cv2.findHomography(FchessCorners, IchessCorners) ImageH.append(H) cam1 = SIGBTools.Camera(hstack((K,dot(K,array([[0],[0],[-1]])) )) ) box_cam1 = cam1.project(SIGBTools.toHomogenious(cubePoints[:,:5])) cam2 = SIGBTools.Camera(dot(ImageH[3],cam1.P)) A = dot(linalg.inv(K),cam2.P[:,:3]) A = array([A[:,0],A[:,1],cross(A[:,0],A[:,1])]).T cam2.P[:,:3] = dot(K,A) box_cam2 = cam2.project(SIGBTools.toHomogenious(cubePoints)) print box_cam2 #figure() #imshow(I4) #plot(box_cam2[0,:],box_cam2[1,:],linewidth=3) #show() p=box_cam2 ''' Drawing the box manually ''' #bottom cv2.line(I4, (int(p[0][1]), int(p[1][1])), (int(p[0][2]),int(p[1][2])),(255,255,0),2) cv2.line(I4, (int(p[0][2]), int(p[1][2])), (int(p[0][3]),int(p[1][3])),(255,255,0),2) cv2.line(I4, (int(p[0][3]), int(p[1][3])), (int(p[0][4]),int(p[1][4])),(255,255,0),2) cv2.line(I4, (int(p[0][1]), int(p[1][1])), (int(p[0][4]),int(p[1][4])),(255,255,0),2) #connecting lines cv2.line(I4, (int(p[0][4]), int(p[1][4])), (int(p[0][5]),int(p[1][5])),(255,255,0),2) cv2.line(I4, (int(p[0][1]), int(p[1][1])), (int(p[0][6]),int(p[1][6])),(255,255,0),2) cv2.line(I4, (int(p[0][2]), int(p[1][2])), (int(p[0][7]),int(p[1][7])),(255,255,0),2) cv2.line(I4, (int(p[0][3]), int(p[1][3])), (int(p[0][8]),int(p[1][8])),(255,255,0),2) #top cv2.line(I4, (int(p[0][5]), int(p[1][5])), (int(p[0][6]),int(p[1][6])),(255,255,0),2) cv2.line(I4, (int(p[0][6]), int(p[1][6])), (int(p[0][7]),int(p[1][7])),(255,255,0),2) cv2.line(I4, (int(p[0][7]), int(p[1][7])), (int(p[0][8]),int(p[1][8])),(255,255,0),2) cv2.line(I4, (int(p[0][8]), int(p[1][8])), (int(p[0][9]),int(p[1][9])),(255,255,0),2) cv2.imshow('Dupa',I4) cv2.waitKey(10000) return