Python cv2.solvePnP() Examples
The following are 30
code examples of cv2.solvePnP().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
cv2
, or try the search function
.
Example #1
Source File: pose_estimator.py From image_utility with MIT License | 8 votes |
def solve_pose_by_68_points(self, image_points): """ Solve pose from all the 68 image points Return (rotation_vector, translation_vector) as pose. """ if self.r_vec is None: (_, rotation_vector, translation_vector) = cv2.solvePnP( self.model_points_68, image_points, self.camera_matrix, self.dist_coeefs) self.r_vec = rotation_vector self.t_vec = translation_vector (_, rotation_vector, translation_vector) = cv2.solvePnP( self.model_points_68, image_points, self.camera_matrix, self.dist_coeefs, rvec=self.r_vec, tvec=self.t_vec, useExtrinsicGuess=True) return (rotation_vector, translation_vector)
Example #2
Source File: head_pose_solver.py From talking-head-anime-demo with MIT License | 8 votes |
def solve_head_pose(self, face_landmarks): indices = [17, 21, 22, 26, 36, 39, 42, 45, 31, 35] image_pts = np.zeros((len(indices), 2)) for i in range(len(indices)): part = face_landmarks.part(indices[i]) image_pts[i, 0] = part.x image_pts[i, 1] = part.y _, rotation_vec, translation_vec = cv2.solvePnP(self.face_model_points, image_pts, self.camera_matrix, self.distortion_coeffs) projected_head_pose_box_points, _ = cv2.projectPoints(self.head_pose_box_points, rotation_vec, translation_vec, self.camera_matrix, self.distortion_coeffs) projected_head_pose_box_points = tuple(map(tuple, projected_head_pose_box_points.reshape(8, 2))) # Calculate euler angle rotation_mat, _ = cv2.Rodrigues(rotation_vec) pose_mat = cv2.hconcat((rotation_mat, translation_vec)) _, _, _, _, _, _, euler_angles = cv2.decomposeProjectionMatrix(pose_mat) return projected_head_pose_box_points, euler_angles
Example #3
Source File: marker.py From BAR4Py with MIT License | 7 votes |
def calculateExtrinsics(self, cameraParameters): ''' Inputs: cameraParameters is CameraParameters object Calculate: rotate vector and transform vector >>> marker.calculateExtrinsics(camera_matrix, dist_coeff) >>> print(marker.rvec, marker.tvec) ''' object_points = np.zeros((4,3), dtype=np.float32) object_points[:,:2] = np.mgrid[0:2,0:2].T.reshape(-1,2) # Test Code. # object_points[:] -= 0.5 marker_points = self.corners if marker_points is None: raise TypeError('The marker.corners is None') camera_matrix = cameraParameters.camera_matrix dist_coeff = cameraParameters.dist_coeff ret, rvec, tvec = cv2.solvePnP(object_points, marker_points, camera_matrix, dist_coeff) if ret: self.rvec, self.tvec = rvec, tvec return ret
Example #4
Source File: pose_estimator.py From image_utility with MIT License | 7 votes |
def solve_pose(self, image_points): """ Solve pose from image points Return (rotation_vector, translation_vector) as pose. """ assert image_points.shape[0] == self.model_points_68.shape[0], "3D points and 2D points should be of same number." (_, rotation_vector, translation_vector) = cv2.solvePnP( self.model_points, image_points, self.camera_matrix, self.dist_coeefs) # (success, rotation_vector, translation_vector) = cv2.solvePnP( # self.model_points, # image_points, # self.camera_matrix, # self.dist_coeefs, # rvec=self.r_vec, # tvec=self.t_vec, # useExtrinsicGuess=True) return (rotation_vector, translation_vector)
Example #5
Source File: BPnP.py From BPnP with MIT License | 6 votes |
def forward(ctx, pts2d, pts3d, K, ini_pose=None): bs = pts2d.size(0) n = pts2d.size(1) device = pts2d.device K_np = np.array(K.detach().cpu()) P_6d = torch.zeros(bs,6,device=device) for i in range(bs): pts2d_i_np = np.ascontiguousarray(pts2d[i].detach().cpu()).reshape((n,1,2)) pts3d_i_np = np.ascontiguousarray(pts3d[i].detach().cpu()).reshape((n,3)) if ini_pose is None: _, rvec0, T0, _ = cv.solvePnPRansac(objectPoints=pts3d_i_np, imagePoints=pts2d_i_np, cameraMatrix=K_np, distCoeffs=None, flags=cv.SOLVEPNP_ITERATIVE, confidence=0.9999 ,reprojectionError=1) else: rvec0 = np.array(ini_pose[i, 0:3].cpu().view(3, 1)) T0 = np.array(ini_pose[i, 3:6].cpu().view(3, 1)) _, rvec, T = cv.solvePnP(objectPoints=pts3d_i_np, imagePoints=pts2d_i_np, cameraMatrix=K_np, distCoeffs=None, flags=cv.SOLVEPNP_ITERATIVE, useExtrinsicGuess=True, rvec=rvec0, tvec=T0) angle_axis = torch.tensor(rvec,device=device,dtype=torch.float).view(1, 3) T = torch.tensor(T,device=device,dtype=torch.float).view(1, 3) P_6d[i,:] = torch.cat((angle_axis,T),dim=-1) ctx.save_for_backward(pts2d,P_6d,pts3d,K) return P_6d
Example #6
Source File: head_pose_estimation.py From deepgaze with MIT License | 6 votes |
def _return_landmarks(self, inputImg, roiX, roiY, roiW, roiH, points_to_return=range(0,68)): """ Return the the roll pitch and yaw angles associated with the input image. @param image It is a colour image. It must be >= 64 pixel. @param radians When True it returns the angle in radians, otherwise in degrees. """ #Creating a dlib rectangle and finding the landmarks dlib_rectangle = dlib.rectangle(left=int(roiX), top=int(roiY), right=int(roiW), bottom=int(roiH)) dlib_landmarks = self._shape_predictor(inputImg, dlib_rectangle) #It selects only the landmarks that #have been indicated in the input parameter "points_to_return". #It can be used in solvePnP() to estimate the 3D pose. landmarks = np.zeros((len(points_to_return),2), dtype=np.float32) counter = 0 for point in points_to_return: landmarks[counter] = [dlib_landmarks.parts()[point].x, dlib_landmarks.parts()[point].y] counter += 1 return landmarks
Example #7
Source File: pose_estimator.py From VTuber_Unity with MIT License | 6 votes |
def solve_pose(self, image_points): """ Solve pose from image points Return (rotation_vector, translation_vector) as pose. """ assert image_points.shape[0] == self.model_points_68.shape[0], "3D points and 2D points should be of same number." (_, rotation_vector, translation_vector) = cv2.solvePnP( self.model_points, image_points, self.camera_matrix, self.dist_coefs) # (success, rotation_vector, translation_vector) = cv2.solvePnP( # self.model_points, # image_points, # self.camera_matrix, # self.dist_coefs, # rvec=self.r_vec, # tvec=self.t_vec, # useExtrinsicGuess=True) return (rotation_vector, translation_vector)
Example #8
Source File: marker.py From BAR4Py with MIT License | 6 votes |
def calculateExtrinsics(self, cameraParameters): ''' Inputs: cameraParameters is CameraParameters object Calculate: rotate vector and transform vector >>> marker.calculateExtrinsics(camera_matrix, dist_coeff) >>> print(marker.rvec, marker.tvec) ''' object_points = np.zeros((4,3), dtype=np.float32) object_points[:,:2] = np.mgrid[0:2,0:2].T.reshape(-1,2) # Test Code. # object_points[:] -= 0.5 marker_points = self.corners if marker_points is None: raise TypeError('The marker.corners is None') camera_matrix = cameraParameters.camera_matrix dist_coeff = cameraParameters.dist_coeff ret, rvec, tvec = cv2.solvePnP(object_points, marker_points, camera_matrix, dist_coeff) if ret: self.rvec, self.tvec = rvec, tvec return ret
Example #9
Source File: marker.py From BAR4Py with MIT License | 6 votes |
def calculateExtrinsics(self, cameraParameters): ''' Inputs: cameraParameters is CameraParameters object Calculate: rotate vector and transform vector >>> marker.calculateExtrinsics(camera_matrix, dist_coeff) >>> print(marker.rvec, marker.tvec) ''' object_points = np.zeros((4,3), dtype=np.float32) object_points[:,:2] = np.mgrid[0:2,0:2].T.reshape(-1,2) # Test Code. # object_points[:] -= 0.5 marker_points = self.corners if marker_points is None: raise TypeError('The marker.corners is None') camera_matrix = cameraParameters.camera_matrix dist_coeff = cameraParameters.dist_coeff ret, rvec, tvec = cv2.solvePnP(object_points, marker_points, camera_matrix, dist_coeff) if ret: self.rvec, self.tvec = rvec, tvec return ret
Example #10
Source File: marker.py From BAR4Py with MIT License | 6 votes |
def calculateExtrinsics(self, cameraParameters): ''' Inputs: cameraParameters is CameraParameters object Calculate: rotate vector and transform vector >>> marker.calculateExtrinsics(camera_matrix, dist_coeff) >>> print(marker.rvec, marker.tvec) ''' object_points = np.zeros((4,3), dtype=np.float32) object_points[:,:2] = np.mgrid[0:2,0:2].T.reshape(-1,2) # Test Code. # object_points[:] -= 0.5 marker_points = self.corners if marker_points is None: raise TypeError('The marker.corners is None') camera_matrix = cameraParameters.camera_matrix dist_coeff = cameraParameters.dist_coeff ret, rvec, tvec = cv2.solvePnP(object_points, marker_points, camera_matrix, dist_coeff) if ret: self.rvec, self.tvec = rvec, tvec return ret
Example #11
Source File: pose_estimator.py From head-pose-estimation with MIT License | 6 votes |
def solve_pose_by_68_points(self, image_points): """ Solve pose from all the 68 image points Return (rotation_vector, translation_vector) as pose. """ if self.r_vec is None: (_, rotation_vector, translation_vector) = cv2.solvePnP( self.model_points_68, image_points, self.camera_matrix, self.dist_coeefs) self.r_vec = rotation_vector self.t_vec = translation_vector (_, rotation_vector, translation_vector) = cv2.solvePnP( self.model_points_68, image_points, self.camera_matrix, self.dist_coeefs, rvec=self.r_vec, tvec=self.t_vec, useExtrinsicGuess=True) return (rotation_vector, translation_vector)
Example #12
Source File: pose_estimator.py From head-pose-estimation with MIT License | 6 votes |
def solve_pose(self, image_points): """ Solve pose from image points Return (rotation_vector, translation_vector) as pose. """ assert image_points.shape[0] == self.model_points_68.shape[0], "3D points and 2D points should be of same number." (_, rotation_vector, translation_vector) = cv2.solvePnP( self.model_points, image_points, self.camera_matrix, self.dist_coeefs) # (success, rotation_vector, translation_vector) = cv2.solvePnP( # self.model_points, # image_points, # self.camera_matrix, # self.dist_coeefs, # rvec=self.r_vec, # tvec=self.t_vec, # useExtrinsicGuess=True) return (rotation_vector, translation_vector)
Example #13
Source File: utils.py From models with MIT License | 6 votes |
def pnp(points_3D, points_2D, cameraMatrix): try: distCoeffs = pnp.distCoeffs except: distCoeffs = np.zeros((8, 1), dtype='float32') assert points_2D.shape[0] == points_2D.shape[0], 'points 3D and points 2D must have same number of vertices' _, R_exp, t = cv2.solvePnP(points_3D, # points_2D, np.ascontiguousarray(points_2D[:,:2]).reshape((-1,1,2)), cameraMatrix, distCoeffs) # , None, None, False, cv2.SOLVEPNP_UPNP) R, _ = cv2.Rodrigues(R_exp) return R, t
Example #14
Source File: face_model.py From pytorch_mpiigaze with MIT License | 6 votes |
def estimate_head_pose(self, face: Face, camera: Camera) -> None: """Estimate the head pose by fitting 3D template model.""" # If the number of the template points is small, cv2.solvePnP # becomes unstable, so set the default value for rvec and tvec # and set useExtrinsicGuess to True. # The default values of rvec and tvec below mean that the # initial estimate of the head pose is not rotated and the # face is in front of the camera. rvec = np.zeros(3, dtype=np.float) tvec = np.array([0, 0, 1], dtype=np.float) _, rvec, tvec = cv2.solvePnP(self.LANDMARKS, face.landmarks, camera.camera_matrix, camera.dist_coefficients, rvec, tvec, useExtrinsicGuess=True, flags=cv2.SOLVEPNP_ITERATIVE) rot = Rotation.from_rotvec(rvec) face.head_pose_rot = rot face.head_position = tvec face.reye.head_pose_rot = rot face.leye.head_pose_rot = rot
Example #15
Source File: BPnP.py From BPnP with MIT License | 6 votes |
def forward(ctx, pts2d, pts3d, K, ini_pose=None): bs = pts2d.size(0) n = pts2d.size(1) device = pts2d.device pts3d_np = np.array(pts3d.detach().cpu()) K_np = np.array(K.detach().cpu()) P_6d = torch.zeros(bs,6,device=device) for i in range(bs): pts2d_i_np = np.ascontiguousarray(pts2d[i].detach().cpu()).reshape((n,1,2)) if ini_pose is None: _, rvec0, T0, _ = cv.solvePnPRansac(objectPoints=pts3d_np, imagePoints=pts2d_i_np, cameraMatrix=K_np, distCoeffs=None, flags=cv.SOLVEPNP_ITERATIVE, confidence=0.9999 ,reprojectionError=3) else: rvec0 = np.array(ini_pose[i, 0:3].cpu().view(3, 1)) T0 = np.array(ini_pose[i, 3:6].cpu().view(3, 1)) _, rvec, T = cv.solvePnP(objectPoints=pts3d_np, imagePoints=pts2d_i_np, cameraMatrix=K_np, distCoeffs=None, flags=cv.SOLVEPNP_ITERATIVE, useExtrinsicGuess=True, rvec=rvec0, tvec=T0) angle_axis = torch.tensor(rvec,device=device,dtype=torch.float).view(1, 3) T = torch.tensor(T,device=device,dtype=torch.float).view(1, 3) P_6d[i,:] = torch.cat((angle_axis,T),dim=-1) ctx.save_for_backward(pts2d,P_6d,pts3d,K) return P_6d
Example #16
Source File: camera_calibration.py From EmotionClassifier with GNU General Public License v3.0 | 5 votes |
def calib_camera(model3D, fidu_XY): #compute pose using refrence 3D points + query 2D points ret, rvecs, tvec = cv2.solvePnP(model3D.model_TD, fidu_XY, model3D.out_A, None, None, None, False) rmat, jacobian = cv2.Rodrigues(rvecs, None) inside = calc_inside(model3D.out_A, rmat, tvec, model3D.size_U[0], model3D.size_U[1], model3D.model_TD) if(inside == 0): tvec = -tvec t = np.pi RRz180 = np.asmatrix([np.cos(t), -np.sin(t), 0, np.sin(t), np.cos(t), 0, 0, 0, 1]).reshape((3, 3)) rmat = RRz180*rmat return rmat, tvec
Example #17
Source File: localization.py From hfnet with MIT License | 5 votes |
def do_pnp(kpts, lms, query_info, config): kpts = kpts.astype(np.float32).reshape((-1, 1, 2)) lms = lms.astype(np.float32).reshape((-1, 1, 3)) success, R_vec, t, inliers = cv2.solvePnPRansac( lms, kpts, query_info.K, np.array([query_info.dist, 0, 0, 0]), iterationsCount=5000, reprojectionError=config['reproj_error'], flags=cv2.SOLVEPNP_P3P) if success: inliers = inliers[:, 0] num_inliers = len(inliers) inlier_ratio = len(inliers) / len(kpts) success &= num_inliers >= config['min_inliers'] ret, R_vec, t = cv2.solvePnP( lms[inliers], kpts[inliers], query_info.K, np.array([query_info.dist, 0, 0, 0]), rvec=R_vec, tvec=t, useExtrinsicGuess=True, flags=cv2.SOLVEPNP_ITERATIVE) assert ret query_T_w = np.eye(4) query_T_w[:3, :3] = cv2.Rodrigues(R_vec)[0] query_T_w[:3, 3] = t[:, 0] w_T_query = np.linalg.inv(query_T_w) ret = LocResult(success, num_inliers, inlier_ratio, w_T_query) else: inliers = np.empty((0,), np.int32) ret = loc_failure return ret, inliers
Example #18
Source File: 5b-solver3.py From ImageAnalysis with MIT License | 5 votes |
def rvec2quat(rvec, cam2body): Rned2cam, jac = cv2.Rodrigues(rvec) Rned2body = cam2body.dot(Rned2cam) Rbody2ned = np.matrix(Rned2body).T # make 3x3 rotation matrix into 4x4 homogeneous matrix hIR = np.concatenate( (np.concatenate( (Rbody2ned, np.zeros((3,1))),1), np.mat([0,0,0,1])) ) quat = transformations.quaternion_from_matrix(hIR) return quat # Iterate through the project image list pairs and run solvePnP on # each image pair individually to get their relative camera # orientations. Then use this information to correct the camera's # pose. This alone doesn't account for scaling which is why there is # the earlier varient to help correct scaling.
Example #19
Source File: plane_ar.py From PyCV-time with MIT License | 5 votes |
def draw_overlay(self, vis, tracked): x0, y0, x1, y1 = tracked.target.rect quad_3d = np.float32([[x0, y0, 0], [x1, y0, 0], [x1, y1, 0], [x0, y1, 0]]) fx = 0.5 + cv2.getTrackbarPos('focal', 'plane') / 50.0 h, w = vis.shape[:2] K = np.float64([[fx*w, 0, 0.5*(w-1)], [0, fx*w, 0.5*(h-1)], [0.0,0.0, 1.0]]) dist_coef = np.zeros(4) ret, rvec, tvec = cv2.solvePnP(quad_3d, tracked.quad, K, dist_coef) verts = ar_verts * [(x1-x0), (y1-y0), -(x1-x0)*0.3] + (x0, y0, 0) verts = cv2.projectPoints(verts, rvec, tvec, K, dist_coef)[0].reshape(-1, 2) for i, j in ar_edges: (x0, y0), (x1, y1) = verts[i], verts[j] cv2.line(vis, (int(x0), int(y0)), (int(x1), int(y1)), (255, 255, 0), 2)
Example #20
Source File: plane_ar.py From PyCV-time with MIT License | 5 votes |
def draw_overlay(self, vis, tracked): x0, y0, x1, y1 = tracked.target.rect quad_3d = np.float32([[x0, y0, 0], [x1, y0, 0], [x1, y1, 0], [x0, y1, 0]]) fx = 0.5 + cv2.getTrackbarPos('focal', 'plane') / 50.0 h, w = vis.shape[:2] K = np.float64([[fx*w, 0, 0.5*(w-1)], [0, fx*w, 0.5*(h-1)], [0.0,0.0, 1.0]]) dist_coef = np.zeros(4) ret, rvec, tvec = cv2.solvePnP(quad_3d, tracked.quad, K, dist_coef) verts = ar_verts * [(x1-x0), (y1-y0), -(x1-x0)*0.3] + (x0, y0, 0) verts = cv2.projectPoints(verts, rvec, tvec, K, dist_coef)[0].reshape(-1, 2) for i, j in ar_edges: (x0, y0), (x1, y1) = verts[i], verts[j] cv2.line(vis, (int(x0), int(y0)), (int(x1), int(y1)), (255, 255, 0), 2)
Example #21
Source File: LandmarksProcessor.py From DeepFaceLab with GNU General Public License v3.0 | 5 votes |
def estimate_averaged_yaw(landmarks): # Works much better than solvePnP if landmarks from "3DFAN" if not isinstance(landmarks, np.ndarray): landmarks = np.array (landmarks) l = ( (landmarks[27][0]-landmarks[0][0]) + (landmarks[28][0]-landmarks[1][0]) + (landmarks[29][0]-landmarks[2][0]) ) / 3.0 r = ( (landmarks[16][0]-landmarks[27][0]) + (landmarks[15][0]-landmarks[28][0]) + (landmarks[14][0]-landmarks[29][0]) ) / 3.0 return float(r-l)
Example #22
Source File: pose.py From Peppa_Pig_Face_Engine with Apache License 2.0 | 5 votes |
def get_head_pose(shape,img): h,w,_=img.shape K = [w, 0.0, w//2, 0.0, w, h//2, 0.0, 0.0, 1.0] # Assuming no lens distortion D = [0, 0, 0.0, 0.0, 0] cam_matrix = np.array(K).reshape(3, 3).astype(np.float32) dist_coeffs = np.array(D).reshape(5, 1).astype(np.float32) # image_pts = np.float32([shape[17], shape[21], shape[22], shape[26], shape[36], # shape[39], shape[42], shape[45], shape[31], shape[35], # shape[48], shape[54], shape[57], shape[8]]) image_pts = np.float32([shape[17], shape[21], shape[22], shape[26], shape[36], shape[39], shape[42], shape[45], shape[31], shape[35]]) _, rotation_vec, translation_vec = cv2.solvePnP(object_pts, image_pts, cam_matrix, dist_coeffs) reprojectdst, _ = cv2.projectPoints(reprojectsrc, rotation_vec, translation_vec, cam_matrix, dist_coeffs) reprojectdst = tuple(map(tuple, reprojectdst.reshape(8, 2))) # calc euler angle rotation_mat, _ = cv2.Rodrigues(rotation_vec) pose_mat = cv2.hconcat((rotation_mat, translation_vec)) _, _, _, _, _, _, euler_angle = cv2.decomposeProjectionMatrix(pose_mat) return reprojectdst, euler_angle
Example #23
Source File: evaluation_utils.py From PVN3D with MIT License | 5 votes |
def pnp(points_3d, points_2d, camera_matrix,method=cv2.SOLVEPNP_ITERATIVE): try: dist_coeffs = pnp.dist_coeffs except: dist_coeffs = np.zeros(shape=[8, 1], dtype='float64') assert points_3d.shape[0] == points_2d.shape[0], 'points 3D and points 2D must have same number of vertices' if method==cv2.SOLVEPNP_EPNP: points_3d=np.expand_dims(points_3d, 0) points_2d=np.expand_dims(points_2d, 0) points_2d = np.ascontiguousarray(points_2d.astype(np.float64)) points_3d = np.ascontiguousarray(points_3d.astype(np.float64)) camera_matrix = camera_matrix.astype(np.float64) # _, R_exp, t = cv2.solvePnP(points_3d, # points_2d, # camera_matrix, # dist_coeffs, # flags=method) # # , None, None, False, cv2.SOLVEPNP_UPNP) _, R_exp, t, _ = cv2.solvePnPRansac(points_3d, points_2d, camera_matrix, dist_coeffs, ) R, _ = cv2.Rodrigues(R_exp) # trans_3d=np.matmul(points_3d,R.transpose())+t.transpose() # if np.max(trans_3d[:,2]<0): # R=-R # t=-t return np.concatenate([R, t], axis=-1)
Example #24
Source File: process.py From edusense with BSD 3-Clause "New" or "Revised" License | 5 votes |
def get_3d_head_position(pose,size): image_points = np.array([ (pose[0][0], pose[0][1]), # Nose tip (pose[15][0], pose[15][1]), # Right eye (pose[14][0], pose[14][1]), # Left eye (pose[17][0], pose[17][1]), # Right ear (pose[16][0], pose[16][1]), # Left ear ], dtype="double") model_points = np.array([ (-48.0, 0.0, 21.0), # Nose tip (-5.0, -65.5, -20.0), # Right eye (-5.0, 65.6, -20.0), # Left eye (-6.0, -77.5, -100.0), # Right ear (-6.0, 77.5, -100.0) # Left ear ]) c_x = size[1]/2 c_y = size[0]/2 f_x = c_x / np.tan(60/2 * np.pi / 180 ) f_y = f_x camera_matrix = np.array( [[f_x, 0, c_x], [0, f_y, c_y], [0, 0, 1]], dtype = "double" ) dist_coeffs = np.zeros((4,1)) (success, rotation_vector, translation_vector) = cv2.solvePnP(model_points, image_points, camera_matrix, dist_coeffs, flags=cv2.SOLVEPNP_ITERATIVE) tvec = (int(translation_vector[0]/100.0),int(translation_vector[1]/100.0),abs(int(translation_vector[2]/100.0))) return tvec
Example #25
Source File: headpose.py From PINTO_model_zoo with MIT License | 5 votes |
def get_head_pose(shape,img): h,w,_=img.shape K = [w, 0.0, w//2, 0.0, w, h//2, 0.0, 0.0, 1.0] # Assuming no lens distortion D = [0, 0, 0.0, 0.0, 0] cam_matrix = np.array(K).reshape(3, 3).astype(np.float32) dist_coeffs = np.array(D).reshape(5, 1).astype(np.float32) # image_pts = np.float32([shape[17], shape[21], shape[22], shape[26], shape[36], # shape[39], shape[42], shape[45], shape[31], shape[35], # shape[48], shape[54], shape[57], shape[8]]) image_pts = np.float32([shape[17], shape[21], shape[22], shape[26], shape[36], shape[39], shape[42], shape[45], shape[31], shape[35]]) _, rotation_vec, translation_vec = cv2.solvePnP(object_pts, image_pts, cam_matrix, dist_coeffs) reprojectdst, _ = cv2.projectPoints(reprojectsrc, rotation_vec, translation_vec, cam_matrix, dist_coeffs) reprojectdst = tuple(map(tuple, reprojectdst.reshape(8, 2))) # calc euler angle rotation_mat, _ = cv2.Rodrigues(rotation_vec) pose_mat = cv2.hconcat((rotation_mat, translation_vec)) _, _, _, _, _, _, euler_angle = cv2.decomposeProjectionMatrix(pose_mat) return reprojectdst, euler_angle
Example #26
Source File: tagUtils.py From Apriltag_python with MIT License | 5 votes |
def get_Kmat(H): campoint = project_array(H)*1.0 opoints = np.array([[-1.0, -1.0, 0.0], [1.0, -1.0, 0.0], [1.0, 1.0, 0.0], [-1.0, 1.0, 0.0]]) opoints = opoints*0.5 rate, rvec, tvec = cv2.solvePnP(opoints, campoint, Kmat, disCoeffs) return rvec,tvec
Example #27
Source File: page_dewarp.py From page_dewarp with MIT License | 5 votes |
def get_default_params(corners, ycoords, xcoords): # page width and height page_width = np.linalg.norm(corners[1] - corners[0]) page_height = np.linalg.norm(corners[-1] - corners[0]) rough_dims = (page_width, page_height) # our initial guess for the cubic has no slope cubic_slopes = [0.0, 0.0] # object points of flat page in 3D coordinates corners_object3d = np.array([ [0, 0, 0], [page_width, 0, 0], [page_width, page_height, 0], [0, page_height, 0]]) # estimate rotation and translation from four 2D-to-3D point # correspondences _, rvec, tvec = cv2.solvePnP(corners_object3d, corners, K, np.zeros(5)) span_counts = [len(xc) for xc in xcoords] params = np.hstack((np.array(rvec).flatten(), np.array(tvec).flatten(), np.array(cubic_slopes).flatten(), ycoords.flatten()) + tuple(xcoords)) return rough_dims, span_counts, params
Example #28
Source File: augmented_reality_piramide.py From OpenCV-3-x-with-Python-By-Example with MIT License | 5 votes |
def overlay_graphics(self, img, tracked): x_start, y_start, x_end, y_end = tracked.target.rect quad_3d = np.float32([[x_start, y_start, 0], [x_end, y_start, 0], [x_end, y_end, 0], [x_start, y_end, 0]]) h, w = img.shape[:2] K = np.float64([[w, 0, 0.5*(w-1)], [0, w, 0.5*(h-1)], [0, 0, 1.0]]) dist_coef = np.zeros(4) ret, rvec, tvec = cv2.solvePnP(objectPoints=quad_3d, imagePoints=tracked.quad, cameraMatrix=K, distCoeffs=dist_coef) verts = self.overlay_vertices * \ [(x_end-x_start), (y_end-y_start), -(x_end-x_start)*0.3] + (x_start, y_start, 0) verts = cv2.projectPoints(verts, rvec, tvec, cameraMatrix=K, distCoeffs=dist_coef)[0].reshape(-1, 2) verts_floor = np.int32(verts).reshape(-1,2) cv2.drawContours(img, contours=[verts_floor[:4]], contourIdx=-1, color=self.color_base, thickness=-3) cv2.drawContours(img, contours=[np.vstack((verts_floor[:2], verts_floor[4:5]))], contourIdx=-1, color=(0,255,0), thickness=-3) cv2.drawContours(img, contours=[np.vstack((verts_floor[1:3], verts_floor[4:5]))], contourIdx=-1, color=(255,0,0), thickness=-3) cv2.drawContours(img, contours=[np.vstack((verts_floor[2:4], verts_floor[4:5]))], contourIdx=-1, color=(0,0,150), thickness=-3) cv2.drawContours(img, contours=[np.vstack((verts_floor[3:4], verts_floor[0:1], verts_floor[4:5]))], contourIdx=-1, color=(255,255,0), thickness=-3) for i, j in self.overlay_edges: (x_start, y_start), (x_end, y_end) = verts[i], verts[j] cv2.line(img, (int(x_start), int(y_start)), (int(x_end), int(y_end)), self.color_lines, 2)
Example #29
Source File: augmented_reality_piramide_v2.py From OpenCV-3-x-with-Python-By-Example with MIT License | 5 votes |
def overlay_graphics(self, img, tracked): x_start, y_start, x_end, y_end = tracked.target.rect quad_3d = np.float32([[x_start, y_start, 0], [x_end, y_start, 0], \ [x_end, y_end, 0], [x_start, y_end, 0]]) h, w = img.shape[:2] K = np.float64([[w, 0, 0.5*(w-1)], [0, w, 0.5*(h-1)], [0, 0, 1.0]]) dist_coef = np.zeros(4) ret, rvec, tvec = cv2.solvePnP(quad_3d, tracked.quad, K, dist_coef) self.time_counter += 1 if not self.time_counter % 20: self.graphics_counter = (self.graphics_counter + 1) % 8 self.overlay_vertices = np.float32([[0, 0, 0], [0, 1, 0],\ [1, 1, 0], [1, 0, 0], [0.5, 0.5, self.graphics_counter]]) verts = self.overlay_vertices * [(x_end-x_start), (y_end-y_start),\ -(x_end-x_start)*0.3] + (x_start, y_start, 0) verts = cv2.projectPoints(verts, rvec, tvec, K, dist_coef)[0].reshape(-1, 2) verts_floor = np.int32(verts).reshape(-1,2) cv2.drawContours(img, [verts_floor[:4]], -1, self.color_base, -3) cv2.drawContours(img, [np.vstack((verts_floor[:2], \ verts_floor[4:5]))], -1, (0,255,0), -3) cv2.drawContours(img, [np.vstack((verts_floor[1:3], \ verts_floor[4:5]))], -1, (255,0,0), -3) cv2.drawContours(img, [np.vstack((verts_floor[2:4], \ verts_floor[4:5]))], -1, (0,0,150), -3) cv2.drawContours(img, [np.vstack((verts_floor[3:4], \ verts_floor[0:1], verts_floor[4:5]))], -1, (255,255,0), -3) for i, j in self.overlay_edges: (x_start, y_start), (x_end, y_end) = verts[i], verts[j] cv2.line(img, (int(x_start), int(y_start)), (int(x_end), int(y_end)), self.color_lines, 2)
Example #30
Source File: headpose.py From face_landmark with Apache License 2.0 | 5 votes |
def get_head_pose(shape,img): h,w,_=img.shape K = [w, 0.0, w//2, 0.0, w, h//2, 0.0, 0.0, 1.0] # Assuming no lens distortion D = [0, 0, 0.0, 0.0, 0] cam_matrix = np.array(K).reshape(3, 3).astype(np.float32) dist_coeffs = np.array(D).reshape(5, 1).astype(np.float32) # image_pts = np.float32([shape[17], shape[21], shape[22], shape[26], shape[36], # shape[39], shape[42], shape[45], shape[31], shape[35], # shape[48], shape[54], shape[57], shape[8]]) image_pts = np.float32([shape[17], shape[21], shape[22], shape[26], shape[36], shape[39], shape[42], shape[45], shape[31], shape[35]]) _, rotation_vec, translation_vec = cv2.solvePnP(object_pts, image_pts, cam_matrix, dist_coeffs) reprojectdst, _ = cv2.projectPoints(reprojectsrc, rotation_vec, translation_vec, cam_matrix, dist_coeffs) reprojectdst = tuple(map(tuple, reprojectdst.reshape(8, 2))) # calc euler angle rotation_mat, _ = cv2.Rodrigues(rotation_vec) pose_mat = cv2.hconcat((rotation_mat, translation_vec)) _, _, _, _, _, _, euler_angle = cv2.decomposeProjectionMatrix(pose_mat) return reprojectdst, euler_angle