kinfu_demo.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import numpy as np
  2. import cv2 as cv
  3. import sys
  4. from argparse import ArgumentParser
  5. def get_depth_list(folder):
  6. f = open(folder + '/depth.txt', 'r')
  7. rgb = [folder + '/' + s for s in f.read().split() if s.endswith('.png')]
  8. return rgb
  9. def kinfu_demo():
  10. parser = ArgumentParser()
  11. parser.add_argument(
  12. "-i", "--input", help="Required. Path to folder with a input image file", required=True, type=str)
  13. parser.add_argument(
  14. "-t", "--large_kinfu", help="Required. Name of KinFu type", required=False, type=str)
  15. parser.add_argument(
  16. "-ocl", "--use_opencl", help="Required. Flag of OpenCL use", required=False, type=int, default=1)
  17. args = parser.parse_args()
  18. print("Args: ", args)
  19. cv.ocl.setUseOpenCL(args.use_opencl)
  20. if (args.large_kinfu == None or args.large_kinfu == "0"):
  21. params = cv.kinfu_Params.defaultParams()
  22. kf = cv.kinfu_KinFu.create(params)
  23. elif (args.large_kinfu == "1"):
  24. params = cv.kinfu_Params.hashTSDFParams(False)
  25. kf = cv.kinfu_KinFu.create(params)
  26. else:
  27. raise ValueError("Incorrect kinfu type name")
  28. depth_list = get_depth_list(args.input)
  29. for path in depth_list:
  30. image = cv.imread(path, cv.IMREAD_ANYDEPTH)
  31. (height, width) = image.shape
  32. cv.imshow('input', image)
  33. size = height, width, 4
  34. cvt8 = np.zeros(size, dtype=np.uint8)
  35. if not kf.update(image):
  36. kf.reset()
  37. else:
  38. kf.render(cvt8)
  39. cv.imshow('render', cvt8)
  40. cv.pollKey()
  41. cv.waitKey(0)
  42. if __name__ == '__main__':
  43. print(__doc__)
  44. kinfu_demo()
  45. cv.destroyAllWindows()