Python+OpenCV:姿态估计(Pose Estimation)

我不是女神ヾ 2022-12-24 08:54 332阅读 0赞

Python+OpenCV:姿态估计(Pose Estimation)

  1. ####################################################################################################
  2. # 姿态估计(Pose Estimation)
  3. def lmc_cv_pose_estimation(method):
  4. """
  5. 函数功能: 姿态估计(Pose Estimation)。
  6. """
  7. # Load previously saved data
  8. with np.load('Calibration parameters.npz') as X:
  9. camera_matrix, dist_coeffs, rvecs, tvecs = [X[i] for i in ('mtx', 'dist', 'rvecs', 'tvecs')]
  10. # 终止条件(termination criteria)
  11. criteria = (lmc_cv.TERM_CRITERIA_EPS + lmc_cv.TERM_CRITERIA_MAX_ITER, 30, 0.001)
  12. # prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
  13. objp = np.zeros((6 * 7, 3), np.float32)
  14. objp[:, :2] = np.mgrid[0:7, 0:6].T.reshape(-1, 2)
  15. # draw a cube or a three-dimensional coordinate axis
  16. axis = []
  17. if 0 == method:
  18. axis = np.float32([[3, 0, 0], [0, 3, 0], [0, 0, -3]]).reshape(-1, 3)
  19. if 1 == method:
  20. axis = np.float32([[0, 0, 0], [0, 3, 0], [3, 3, 0], [3, 0, 0],
  21. [0, 0, -3], [0, 3, -3], [3, 3, -3], [3, 0, -3]])
  22. # 读取所有匹配的图像
  23. stacking_images = []
  24. corners_image = []
  25. gray_image = []
  26. images = glob.glob('D:/99-Research/TestData/cv/stereo/case1/left*.png')
  27. for image_name in images:
  28. image = lmc_cv.imread(image_name, lmc_cv.IMREAD_UNCHANGED)
  29. image = lmc_cv.cvtColor(image, lmc_cv.COLOR_BGR2RGB)
  30. corners_image = image.copy()
  31. gray_image = lmc_cv.cvtColor(image, lmc_cv.COLOR_BGR2GRAY)
  32. # Find the chess board corners
  33. ret, corners = lmc_cv.findChessboardCorners(gray_image, (7, 6), None)
  34. # If found, add object points, image points (after refining them)
  35. if ret:
  36. # 亚像素角点
  37. corners2 = lmc_cv.cornerSubPix(gray_image, corners, (11, 11), (-1, -1), criteria)
  38. # Find the rotation and translation vectors.
  39. ret, rvecs, tvecs = lmc_cv.solvePnP(objp, corners2, camera_matrix, dist_coeffs)
  40. # project 3D points to image plane
  41. imgpts, jac = lmc_cv.projectPoints(axis, rvecs, tvecs, camera_matrix, dist_coeffs)
  42. # 绘制三维坐标轴
  43. corners_image = lmc_cv_draw_3d_coordinate_axis(method, corners_image, corners2, imgpts)
  44. # stacking images side-by-side
  45. stacking_image = np.hstack((image, corners_image))
  46. stacking_images.append(stacking_image)
  47. # 显示图像
  48. for i in range(len(stacking_images)):
  49. pyplot.figure('Pose Estimation %d' % (i + 1), figsize=(16, 9))
  50. # pyplot.subplot(1, 1, 1)
  51. pyplot.imshow(stacking_images[i], 'gray')
  52. pyplot.title('Pose Estimation')
  53. pyplot.xticks([])
  54. pyplot.yticks([])
  55. pyplot.savefig('%02d.png' % (i + 1))
  56. pyplot.show()
  57. ####################################################################################################
  58. # 绘制3D轴
  59. def lmc_cv_draw_3d_coordinate_axis(method, image, corners, imgpts):
  60. if 0 == method:
  61. corners = np.int32(corners)
  62. imgpts = np.int32(imgpts)
  63. corner = tuple(corners[0].ravel())
  64. image = lmc_cv.line(image, corner, tuple(imgpts[0].ravel()), (255, 0, 0), 5)
  65. image = lmc_cv.line(image, corner, tuple(imgpts[1].ravel()), (0, 255, 0), 5)
  66. image = lmc_cv.line(image, corner, tuple(imgpts[2].ravel()), (0, 0, 255), 5)
  67. if 1 == method:
  68. imgpts = np.int32(imgpts).reshape(-1, 2)
  69. # draw ground floor in green
  70. image = lmc_cv.drawContours(image, [imgpts[:4]], -1, (0, 255, 0), -3)
  71. # draw pillars in blue color
  72. for i, j in zip(range(4), range(4, 8)):
  73. image = lmc_cv.line(image, tuple(imgpts[i]), tuple(imgpts[j]), 255, 3)
  74. # draw top layer in red color
  75. image = lmc_cv.drawContours(image, [imgpts[4:]], -1, (0, 0, 255), 3)
  76. return image

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 1watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 2watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 3watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 4watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 5watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 6watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 6watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 5watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 7watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 8

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 9watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 10watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 11watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 12watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 13watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 14watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 15watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 16watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 17watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 18watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWJpbmc4NjA5_size_16_color_FFFFFF_t_70 19

发表评论

表情:
评论列表 (有 0 条评论,332人围观)

还没有评论,来说两句吧...

相关阅读