Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. '''
  4. Simple example of stereo image matching and point cloud generation.
  5.  
  6. Resulting .ply file cam be easily viewed using MeshLab ( http://meshlab.sourceforge.net/ )
  7. '''
  8.  
  9. # Python 2/3 compatibility
  10. from __future__ import print_function
  11. import time
  12. import numpy as np
  13. import cv2
  14.  
  15. ply_header = '''ply
  16. format ascii 1.0
  17. element vertex %(vert_num)d
  18. property float x
  19. property float y
  20. property float z
  21. property uchar red
  22. property uchar green
  23. property uchar blue
  24. end_header
  25. '''
  26.  
  27. def write_ply(fn, verts, colors):
  28. verts = verts.reshape(-1, 3)
  29. colors = colors.reshape(-1, 3)
  30. verts = np.hstack([verts, colors])
  31. with open(fn, 'wb') as f:
  32. f.write((ply_header % dict(vert_num=len(verts))).encode('utf-8'))
  33. np.savetxt(f, verts, fmt='%f %f %f %d %d %d ')
  34.  
  35.  
  36. if __name__ == '__main__':
  37. print('loading images...')
  38. imgL = cv2.pyrDown( cv2.imread('aloeL.jpg') ) # downscale images for faster processing
  39. imgR = cv2.pyrDown( cv2.imread('aloeR.jpg') )
  40.  
  41. # disparity range is tuned for 'aloe' image pair
  42. window_size = 3
  43. min_disp = 16
  44. num_disp = 112-min_disp
  45. stereo = cv2.StereoSGBM_create(minDisparity = min_disp,
  46. numDisparities = num_disp,
  47. blockSize = 16,
  48. P1 = 8*3*window_size**2,
  49. P2 = 32*3*window_size**2,
  50. disp12MaxDiff = 1,
  51. uniquenessRatio = 10,
  52. speckleWindowSize = 100,
  53. speckleRange = 32
  54. )
  55.  
  56. print('computing disparity...')
  57. start_time = time.time()
  58. disp = stereo.compute(imgL, imgR).astype(np.float32) / 16.0
  59. elapsed_time = time.time() - start_time
  60. print("'done!...'={0}".format(elapsed_time))
  61. #print('generating 3d point cloud...',)
  62. #h, w = imgL.shape[:2]
  63. #f = 0.8*w # guess for focal length
  64. #Q = np.float32([[1, 0, 0, -0.5*w],
  65. # [0,-1, 0, 0.5*h], # turn points 180 deg around x-axis,
  66. # [0, 0, 0, -f], # so that y-axis looks up
  67. # [0, 0, 1, 0]])
  68. #points = cv2.reprojectImageTo3D(disp, Q)
  69. #colors = cv2.cvtColor(imgL, cv2.COLOR_BGR2RGB)
  70. #mask = disp > disp.min()
  71. #out_points = points[mask]
  72. #out_colors = colors[mask]
  73. #out_fn = 'out.ply'
  74. #write_ply('out.ply', out_points, out_colors)
  75. #print('%s saved' % 'out.ply')
  76.  
  77. cv2.imshow('left', imgL)
  78. cv2.imshow('disparity', (disp-min_disp)/num_disp)
  79. cv2.waitKey()
  80. cv2.destroyAllWindows()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement