Azure Kinect Sensor SDK  refs/heads/feature/publishdocs
Documentation for https://github.com/Microsoft/Azure-Kinect-Sensor-SDK
k4a.hpp
1 
7 #ifndef K4A_HPP
8 #define K4A_HPP
9 
10 #include "k4a.h"
11 
12 #include <algorithm>
13 #include <chrono>
14 #include <cstdint>
15 #include <limits>
16 #include <stdexcept>
17 #include <string>
18 #include <vector>
19 
20 namespace k4a
21 {
22 
33 class error : public std::runtime_error
34 {
35 public:
36  using runtime_error::runtime_error;
37 };
38 
39 // Helper functions not intended for use by client code
40 //
41 namespace internal
42 {
44 
51 template<typename output_type, typename input_type> output_type clamp_cast(input_type input)
52 {
53  static_assert(std::is_arithmetic<input_type>::value, "clamp_cast only supports arithmetic types");
54  static_assert(std::is_arithmetic<output_type>::value, "clamp_cast only supports arithmetic types");
55  const input_type min_value = std::is_signed<input_type>() ?
56  static_cast<input_type>(std::numeric_limits<output_type>::min()) :
57  0;
58 
59  input_type max_value = static_cast<input_type>(std::numeric_limits<output_type>::max());
60  if (max_value < 0)
61  {
62  // Output type is of greater or equal size to input type and we've overflowed.
63  //
64  max_value = std::numeric_limits<input_type>::max();
65  }
66  input = std::min(input, max_value);
67  input = std::max(input, min_value);
68  return static_cast<output_type>(input);
69 }
71 } // namespace internal
72 
80 class image
81 {
82 public:
88  image(k4a_image_t handle = nullptr) noexcept : m_handle(handle) {}
89 
92  image(const image &other) noexcept : m_handle(other.m_handle)
93  {
94  if (m_handle != nullptr)
95  {
96  k4a_image_reference(m_handle);
97  }
98  }
99 
102  image(image &&other) noexcept : m_handle(other.m_handle)
103  {
104  other.m_handle = nullptr;
105  }
106 
107  ~image()
108  {
109  reset();
110  }
111 
114  image &operator=(const image &other) noexcept
115  {
116  if (this != &other)
117  {
118  reset();
119  m_handle = other.m_handle;
120  if (m_handle != nullptr)
121  {
122  k4a_image_reference(m_handle);
123  }
124  }
125  return *this;
126  }
127 
130  image &operator=(image &&other) noexcept
131  {
132  if (this != &other)
133  {
134  reset();
135  m_handle = other.m_handle;
136  other.m_handle = nullptr;
137  }
138  return *this;
139  }
140 
143  image &operator=(std::nullptr_t) noexcept
144  {
145  reset();
146  return *this;
147  }
148 
151  bool operator==(const image &other) const noexcept
152  {
153  return m_handle == other.m_handle;
154  }
155 
158  bool operator==(std::nullptr_t) const noexcept
159  {
160  return m_handle == nullptr;
161  }
162 
165  bool operator!=(const image &other) const noexcept
166  {
167  return m_handle != other.m_handle;
168  }
169 
172  bool operator!=(std::nullptr_t) const noexcept
173  {
174  return m_handle != nullptr;
175  }
176 
179  operator bool() const noexcept
180  {
181  return m_handle != nullptr;
182  }
183 
186  k4a_image_t handle() const noexcept
187  {
188  return m_handle;
189  }
190 
193  void reset() noexcept
194  {
195  if (m_handle != nullptr)
196  {
197  k4a_image_release(m_handle);
198  m_handle = nullptr;
199  }
200  }
201 
207  static image create(k4a_image_format_t format, int width_pixels, int height_pixels, int stride_bytes)
208  {
209  k4a_image_t handle = nullptr;
210  k4a_result_t result = k4a_image_create(format, width_pixels, height_pixels, stride_bytes, &handle);
211  if (K4A_RESULT_SUCCEEDED != result)
212  {
213  throw error("Failed to create image!");
214  }
215  return image(handle);
216  }
217 
224  int width_pixels,
225  int height_pixels,
226  int stride_bytes,
227  uint8_t *buffer,
228  size_t buffer_size,
229  k4a_memory_destroy_cb_t *buffer_release_cb,
230  void *buffer_release_cb_context)
231  {
232  k4a_image_t handle = nullptr;
233  k4a_result_t result = k4a_image_create_from_buffer(format,
234  width_pixels,
235  height_pixels,
236  stride_bytes,
237  buffer,
238  buffer_size,
239  buffer_release_cb,
240  buffer_release_cb_context,
241  &handle);
242  if (K4A_RESULT_SUCCEEDED != result)
243  {
244  throw error("Failed to create image from buffer");
245  }
246  return image(handle);
247  }
248 
253  uint8_t *get_buffer() noexcept
254  {
255  return k4a_image_get_buffer(m_handle);
256  }
257 
262  const uint8_t *get_buffer() const noexcept
263  {
264  return k4a_image_get_buffer(m_handle);
265  }
266 
271  size_t get_size() const noexcept
272  {
273  return k4a_image_get_size(m_handle);
274  }
275 
281  {
282  return k4a_image_get_format(m_handle);
283  }
284 
289  int get_width_pixels() const noexcept
290  {
291  return k4a_image_get_width_pixels(m_handle);
292  }
293 
298  int get_height_pixels() const noexcept
299  {
300  return k4a_image_get_height_pixels(m_handle);
301  }
302 
307  int get_stride_bytes() const noexcept
308  {
309  return k4a_image_get_stride_bytes(m_handle);
310  }
311 
316  std::chrono::microseconds get_device_timestamp() const noexcept
317  {
318  return std::chrono::microseconds(k4a_image_get_timestamp_usec(m_handle));
319  }
320 
325  std::chrono::microseconds get_exposure() const noexcept
326  {
327  return std::chrono::microseconds(k4a_image_get_exposure_usec(m_handle));
328  }
329 
334  uint32_t get_white_balance() const noexcept
335  {
336  return k4a_image_get_white_balance(m_handle);
337  }
338 
343  uint32_t get_iso_speed() const noexcept
344  {
345  return k4a_image_get_iso_speed(m_handle);
346  }
347 
352  void set_timestamp(std::chrono::microseconds timestamp) noexcept
353  {
354  k4a_image_set_timestamp_usec(m_handle, internal::clamp_cast<uint64_t>(timestamp.count()));
355  }
356 
361  void set_exposure_time(std::chrono::microseconds exposure) noexcept
362  {
363  k4a_image_set_exposure_time_usec(m_handle, internal::clamp_cast<uint64_t>(exposure.count()));
364  }
365 
370  void set_white_balance(uint32_t white_balance) noexcept
371  {
372  k4a_image_set_white_balance(m_handle, white_balance);
373  }
374 
379  void set_iso_speed(uint32_t iso_speed) noexcept
380  {
381  k4a_image_set_iso_speed(m_handle, iso_speed);
382  }
383 
384 private:
385  k4a_image_t m_handle;
386 };
387 
393 class capture
394 {
395 public:
401  capture(k4a_capture_t handle = nullptr) noexcept : m_handle(handle) {}
402 
405  capture(const capture &other) noexcept : m_handle(other.m_handle)
406  {
407  if (m_handle != nullptr)
408  {
409  k4a_capture_reference(m_handle);
410  }
411  }
412 
415  capture(capture &&other) noexcept : m_handle(other.m_handle)
416  {
417  other.m_handle = nullptr;
418  }
419 
420  ~capture()
421  {
422  reset();
423  }
424 
427  capture &operator=(const capture &other) noexcept
428  {
429  if (this != &other)
430  {
431  reset();
432  m_handle = other.m_handle;
433  if (m_handle != nullptr)
434  {
435  k4a_capture_reference(m_handle);
436  }
437  }
438  return *this;
439  }
440 
443  capture &operator=(capture &&other) noexcept
444  {
445  if (this != &other)
446  {
447  reset();
448  m_handle = other.m_handle;
449  other.m_handle = nullptr;
450  }
451  return *this;
452  }
453 
456  capture &operator=(std::nullptr_t) noexcept
457  {
458  reset();
459  return *this;
460  }
461 
464  bool operator==(const capture &other) const noexcept
465  {
466  return m_handle == other.m_handle;
467  }
468 
471  bool operator==(std::nullptr_t) const noexcept
472  {
473  return m_handle == nullptr;
474  }
475 
478  bool operator!=(const capture &other) const noexcept
479  {
480  return m_handle != other.m_handle;
481  }
482 
485  bool operator!=(std::nullptr_t) const noexcept
486  {
487  return m_handle != nullptr;
488  }
489 
492  operator bool() const noexcept
493  {
494  return m_handle != nullptr;
495  }
496 
499  void reset() noexcept
500  {
501  if (m_handle != nullptr)
502  {
503  k4a_capture_release(m_handle);
504  m_handle = nullptr;
505  }
506  }
507 
512  image get_color_image() const noexcept
513  {
514  return image(k4a_capture_get_color_image(m_handle));
515  }
516 
521  image get_depth_image() const noexcept
522  {
523  return image(k4a_capture_get_depth_image(m_handle));
524  }
525 
530  image get_ir_image() const noexcept
531  {
532  return image(k4a_capture_get_ir_image(m_handle));
533  }
534 
539  void set_color_image(const image &color_image) noexcept
540  {
541  k4a_capture_set_color_image(m_handle, color_image.handle());
542  }
543 
548  void set_depth_image(const image &depth_image) noexcept
549  {
550  k4a_capture_set_depth_image(m_handle, depth_image.handle());
551  }
552 
557  void set_ir_image(const image &ir_image) noexcept
558  {
559  k4a_capture_set_ir_image(m_handle, ir_image.handle());
560  }
561 
566  void set_temperature_c(float temperature_c) noexcept
567  {
568  k4a_capture_set_temperature_c(m_handle, temperature_c);
569  }
570 
575  float get_temperature_c() const noexcept
576  {
577  return k4a_capture_get_temperature_c(m_handle);
578  }
579 
585  static capture create()
586  {
587  k4a_capture_t handle = nullptr;
588  k4a_result_t result = k4a_capture_create(&handle);
589  if (K4A_RESULT_SUCCEEDED != result)
590  {
591  throw error("Failed to create capture!");
592  }
593  return capture(handle);
594  }
595 
596 private:
597  k4a_capture_t m_handle;
598 };
599 
606 {
613  k4a_calibration_type_t source_camera,
614  k4a_calibration_type_t target_camera) const
615  {
616  k4a_float3_t target_point3d;
617  k4a_result_t result =
618  k4a_calibration_3d_to_3d(this, &source_point3d, source_camera, target_camera, &target_point3d);
619 
620  if (K4A_RESULT_SUCCEEDED != result)
621  {
622  throw error("Calibration contained invalid transformation parameters!");
623  }
624  return target_point3d;
625  }
626 
635  bool convert_2d_to_3d(const k4a_float2_t &source_point2d,
636  float source_depth,
637  k4a_calibration_type_t source_camera,
638  k4a_calibration_type_t target_camera,
639  k4a_float3_t *target_point3d) const
640  {
641  int valid = 0;
643  this, &source_point2d, source_depth, source_camera, target_camera, target_point3d, &valid);
644 
645  if (K4A_RESULT_SUCCEEDED != result)
646  {
647  throw error("Calibration contained invalid transformation parameters!");
648  }
649  return static_cast<bool>(valid);
650  }
651 
659  bool convert_3d_to_2d(const k4a_float3_t &source_point3d,
660  k4a_calibration_type_t source_camera,
661  k4a_calibration_type_t target_camera,
662  k4a_float2_t *target_point2d) const
663  {
664  int valid = 0;
665  k4a_result_t result =
666  k4a_calibration_3d_to_2d(this, &source_point3d, source_camera, target_camera, target_point2d, &valid);
667 
668  if (K4A_RESULT_SUCCEEDED != result)
669  {
670  throw error("Calibration contained invalid transformation parameters!");
671  }
672  return static_cast<bool>(valid);
673  }
674 
683  bool convert_2d_to_2d(const k4a_float2_t &source_point2d,
684  float source_depth,
685  k4a_calibration_type_t source_camera,
686  k4a_calibration_type_t target_camera,
687  k4a_float2_t *target_point2d) const
688  {
689  int valid = 0;
691  this, &source_point2d, source_depth, source_camera, target_camera, target_point2d, &valid);
692 
693  if (K4A_RESULT_SUCCEEDED != result)
694  {
695  throw error("Calibration contained invalid transformation parameters!");
696  }
697  return static_cast<bool>(valid);
698  }
699 
705  static calibration get_from_raw(char *raw_calibration,
706  size_t raw_calibration_size,
709  {
710  calibration calib;
711  k4a_result_t result =
712  k4a_calibration_get_from_raw(raw_calibration, raw_calibration_size, depth_mode, color_resolution, &calib);
713 
714  if (K4A_RESULT_SUCCEEDED != result)
715  {
716  throw error("Failed to load calibration from raw calibration blob!");
717  }
718  return calib;
719  }
720 
726  static calibration get_from_raw(uint8_t *raw_calibration,
727  size_t raw_calibration_size,
730  {
731  return get_from_raw(reinterpret_cast<char *>(raw_calibration),
732  raw_calibration_size,
733  depth_mode,
734  color_resolution);
735  }
736 
742  static calibration get_from_raw(std::vector<uint8_t> &raw_calibration,
745  {
746  return get_from_raw(reinterpret_cast<char *>(raw_calibration.data()),
747  raw_calibration.size(),
748  depth_mode,
750  }
751 };
752 
759 {
760 public:
765  transformation(const k4a_calibration_t &calibration) noexcept : m_handle(k4a_transformation_create(&calibration)) {}
766 
772  transformation(k4a_transformation_t handle = nullptr) noexcept : m_handle(handle) {}
773 
776  transformation(transformation &&other) noexcept : m_handle(other.m_handle)
777  {
778  other.m_handle = nullptr;
779  }
780 
781  transformation(const transformation &) = delete;
782 
783  ~transformation()
784  {
785  destroy();
786  }
787 
791  {
792  if (this != &other)
793  {
794  destroy();
795  m_handle = other.m_handle;
796  other.m_handle = nullptr;
797  }
798 
799  return *this;
800  }
801 
804  transformation &operator=(std::nullptr_t) noexcept
805  {
806  destroy();
807  return *this;
808  }
809 
810  transformation &operator=(const transformation &) = delete;
811 
814  void destroy() noexcept
815  {
816  if (m_handle != nullptr)
817  {
818  k4a_transformation_destroy(m_handle);
819  m_handle = nullptr;
820  }
821  }
822 
828  void depth_image_to_color_camera(const image &depth_image, image *transformed_depth_image) const
829  {
830  k4a_result_t result = k4a_transformation_depth_image_to_color_camera(m_handle,
831  depth_image.handle(),
832  transformed_depth_image->handle());
833  if (K4A_RESULT_SUCCEEDED != result)
834  {
835  throw error("Failed to convert depth map to color camera geometry!");
836  }
837  }
838 
844  void color_image_to_depth_camera(const image &depth_image,
845  const image &color_image,
846  image *transformed_color_image) const
847  {
848  k4a_result_t result = k4a_transformation_color_image_to_depth_camera(m_handle,
849  depth_image.handle(),
850  color_image.handle(),
851  transformed_color_image->handle());
852  if (K4A_RESULT_SUCCEEDED != result)
853  {
854  throw error("Failed to convert color image to depth camera geometry!");
855  }
856  }
857 
863  void depth_image_to_point_cloud(const image &depth_image, k4a_calibration_type_t camera, image *xyz_image) const
864  {
865  k4a_result_t result =
866  k4a_transformation_depth_image_to_point_cloud(m_handle, depth_image.handle(), camera, xyz_image->handle());
867  if (K4A_RESULT_SUCCEEDED != result)
868  {
869  throw error("Failed to transform depth image to point cloud!");
870  }
871  }
872 
873 private:
874  k4a_transformation_t m_handle;
875 };
876 
882 class device
883 {
884 public:
890  device(k4a_device_t handle = nullptr) noexcept : m_handle(handle) {}
891 
894  device(device &&dev) noexcept : m_handle(dev.m_handle)
895  {
896  dev.m_handle = nullptr;
897  }
898 
899  device(const device &) = delete;
900 
901  ~device()
902  {
903  close();
904  }
905 
906  device &operator=(const device &) = delete;
907 
910  device &operator=(device &&dev) noexcept
911  {
912  if (this != &dev)
913  {
914  close();
915  m_handle = dev.m_handle;
916  dev.m_handle = nullptr;
917  }
918  return *this;
919  }
920 
923  operator bool() const noexcept
924  {
925  return m_handle != nullptr;
926  }
927 
932  void close() noexcept
933  {
934  if (m_handle != nullptr)
935  {
936  k4a_device_close(m_handle);
937  m_handle = nullptr;
938  }
939  }
940 
946  bool get_capture(capture *cap, std::chrono::milliseconds timeout)
947  {
948  k4a_capture_t capture_handle = nullptr;
949  int32_t timeout_ms = internal::clamp_cast<int32_t>(timeout.count());
950  k4a_wait_result_t result = k4a_device_get_capture(m_handle, &capture_handle, timeout_ms);
951  if (result == K4A_WAIT_RESULT_FAILED)
952  {
953  throw error("Failed to get capture from device!");
954  }
955  else if (result == K4A_WAIT_RESULT_TIMEOUT)
956  {
957  return false;
958  }
959 
960  *cap = capture(capture_handle);
961  return true;
962  }
963 
969  bool get_imu_sample(k4a_imu_sample_t *imu_sample, std::chrono::milliseconds timeout)
970  {
971  int32_t timeout_ms = internal::clamp_cast<int32_t>(timeout.count());
972  k4a_wait_result_t result = k4a_device_get_imu_sample(m_handle, imu_sample, timeout_ms);
973  if (result == K4A_WAIT_RESULT_FAILED)
974  {
975  throw error("Failed to get IMU sample from device!");
976  }
977  else if (result == K4A_WAIT_RESULT_TIMEOUT)
978  {
979  return false;
980  }
981 
982  return true;
983  }
984 
991  {
992  k4a_result_t result = k4a_device_start_cameras(m_handle, configuration);
993  if (K4A_RESULT_SUCCEEDED != result)
994  {
995  throw error("Failed to start cameras!");
996  }
997  }
998 
1003  void stop_cameras() noexcept
1004  {
1005  k4a_device_stop_cameras(m_handle);
1006  }
1007 
1013  void start_imu()
1014  {
1015  k4a_result_t result = k4a_device_start_imu(m_handle);
1016  if (K4A_RESULT_SUCCEEDED != result)
1017  {
1018  throw error("Failed to start IMU!");
1019  }
1020  }
1021 
1026  void stop_imu() noexcept
1027  {
1028  k4a_device_stop_imu(m_handle);
1029  }
1030 
1036  std::string get_serialnum() const
1037  {
1038  std::string serialnum;
1039  size_t buffer = 0;
1040  k4a_buffer_result_t result = k4a_device_get_serialnum(m_handle, &serialnum[0], &buffer);
1041 
1042  if (result == K4A_BUFFER_RESULT_TOO_SMALL && buffer > 1)
1043  {
1044  serialnum.resize(buffer);
1045  result = k4a_device_get_serialnum(m_handle, &serialnum[0], &buffer);
1046  if (result == K4A_BUFFER_RESULT_SUCCEEDED && serialnum[buffer - 1] == 0)
1047  {
1048  // std::string expects there to not be as null terminator at the end of its data but
1049  // k4a_device_get_serialnum adds a null terminator, so we drop the last character of the string after we
1050  // get the result back.
1051  serialnum.resize(buffer - 1);
1052  }
1053  }
1054 
1055  if (result != K4A_BUFFER_RESULT_SUCCEEDED)
1056  {
1057  throw error("Failed to read device serial number!");
1058  }
1059 
1060  return serialnum;
1061  }
1062 
1069  {
1070  k4a_result_t result = k4a_device_get_color_control(m_handle, command, mode, value);
1071  if (K4A_RESULT_SUCCEEDED != result)
1072  {
1073  throw error("Failed to read color control!");
1074  }
1075  }
1076 
1083  {
1084  k4a_result_t result = k4a_device_set_color_control(m_handle, command, mode, value);
1085  if (K4A_RESULT_SUCCEEDED != result)
1086  {
1087  throw error("Failed to set color control!");
1088  }
1089  }
1090 
1096  std::vector<uint8_t> get_raw_calibration() const
1097  {
1098  std::vector<uint8_t> calibration;
1099  size_t buffer = 0;
1100  k4a_buffer_result_t result = k4a_device_get_raw_calibration(m_handle, &calibration[0], &buffer);
1101 
1102  if (result == K4A_BUFFER_RESULT_TOO_SMALL && buffer > 1)
1103  {
1104  calibration.resize(buffer);
1105  result = k4a_device_get_raw_calibration(m_handle, &calibration[0], &buffer);
1106  }
1107 
1108  if (result != K4A_BUFFER_RESULT_SUCCEEDED)
1109  {
1110  throw error("Failed to read raw device calibration!");
1111  }
1112 
1113  return calibration;
1114  }
1115 
1122  {
1123  calibration calib;
1124  k4a_result_t result = k4a_device_get_calibration(m_handle, depth_mode, color_resolution, &calib);
1125 
1126  if (K4A_RESULT_SUCCEEDED != result)
1127  {
1128  throw error("Failed to read device calibration!");
1129  }
1130  return calib;
1131  }
1132 
1139  {
1140  bool sync_in_jack_connected, sync_out_jack_connected;
1141  k4a_result_t result = k4a_device_get_sync_jack(m_handle, &sync_in_jack_connected, &sync_out_jack_connected);
1142 
1143  if (K4A_RESULT_SUCCEEDED != result)
1144  {
1145  throw error("Failed to read sync jack status!");
1146  }
1147  return sync_in_jack_connected;
1148  }
1149 
1156  {
1157  bool sync_in_jack_connected, sync_out_jack_connected;
1158  k4a_result_t result = k4a_device_get_sync_jack(m_handle, &sync_in_jack_connected, &sync_out_jack_connected);
1159 
1160  if (K4A_RESULT_SUCCEEDED != result)
1161  {
1162  throw error("Failed to read sync jack status!");
1163  }
1164  return sync_out_jack_connected;
1165  }
1166 
1173  {
1174  k4a_hardware_version_t version;
1175  k4a_result_t result = k4a_device_get_version(m_handle, &version);
1176 
1177  if (K4A_RESULT_SUCCEEDED != result)
1178  {
1179  throw error("Failed to read device firmware information!");
1180  }
1181  return version;
1182  }
1183 
1189  static device open(uint32_t index)
1190  {
1191  k4a_device_t handle = nullptr;
1192  k4a_result_t result = k4a_device_open(index, &handle);
1193 
1194  if (K4A_RESULT_SUCCEEDED != result)
1195  {
1196  throw error("Failed to open device!");
1197  }
1198  return device(handle);
1199  }
1200 
1205  static uint32_t get_installed_count() noexcept
1206  {
1207  return k4a_device_get_installed_count();
1208  }
1209 
1210 private:
1211  k4a_device_t m_handle;
1212 };
1213 
1218 } // namespace k4a
1219 
1220 #endif
bool is_sync_out_connected() const
Get the device jack status for the synchronization out connector Throws error on failure.
Definition: k4a.hpp:1155
k4a_color_resolution_t color_resolution
Color camera resolution for which calibration was obtained.
Definition: k4atypes.h:1029
Calibration type representing device calibration.
Definition: k4atypes.h:1014
The result was successful.
Definition: k4atypes.h:233
transformation(const k4a_calibration_t &calibration) noexcept
Creates a transformation associated with calibration.
Definition: k4a.hpp:765
void reset() noexcept
Releases the underlying k4a_image_t; the image is set to invalid.
Definition: k4a.hpp:193
k4a_float3_t convert_3d_to_3d(const k4a_float3_t &source_point3d, k4a_calibration_type_t source_camera, k4a_calibration_type_t target_camera) const
Transform a 3d point of a source coordinate system into a 3d point of the target coordinate system...
Definition: k4a.hpp:612
capture & operator=(capture &&other) noexcept
Moves another capture into this capture; other is set to invalid.
Definition: k4a.hpp:443
transformation(transformation &&other) noexcept
Moves another tranformation into a new transformation.
Definition: k4a.hpp:776
k4a_image_t handle() const noexcept
Returns the underlying k4a_image_t handle.
Definition: k4a.hpp:186
void set_exposure_time(std::chrono::microseconds exposure) noexcept
Set the image&#39;s exposure time in microseconds (color images only)
Definition: k4a.hpp:361
k4a_depth_mode_t depth_mode
Depth camera mode for which calibration was obtained.
Definition: k4atypes.h:1028
const uint8_t * get_buffer() const noexcept
Get the image buffer.
Definition: k4a.hpp:262
Structure to define hardware version.
Definition: k4atypes.h:1056
int get_stride_bytes() const noexcept
Get the image stride in bytes.
Definition: k4a.hpp:307
k4a_result_t
Result code returned by Azure Kinect APIs.
Definition: k4atypes.h:217
Exception type thrown when a K4A API call fails.
Definition: k4a.hpp:33
void set_color_image(const image &color_image) noexcept
Set / add a color image to the capture.
Definition: k4a.hpp:539
void set_depth_image(const image &depth_image) noexcept
Set / add a depth image to the capture.
Definition: k4a.hpp:548
size_t get_size() const noexcept
Get the image buffer size in bytes.
Definition: k4a.hpp:271
k4a_depth_mode_t
Depth sensor capture modes.
Definition: k4atypes.h:289
Handle to an Azure Kinect capture.
Definition: k4atypes.h:122
bool operator==(std::nullptr_t) const noexcept
Returns false if the capture is valid, true otherwise.
Definition: k4a.hpp:471
uint32_t get_white_balance() const noexcept
Get the image white balance in Kelvin (color images only)
Definition: k4a.hpp:334
k4a_buffer_result_t
Result code returned by Azure Kinect APIs.
Definition: k4atypes.h:231
static device open(uint32_t index)
Open a k4a device.
Definition: k4a.hpp:1189
capture & operator=(const capture &other) noexcept
Sets capture to a shallow copy of other.
Definition: k4a.hpp:427
void depth_image_to_color_camera(const image &depth_image, image *transformed_depth_image) const
Transforms the depth map into the geometry of the color camera.
Definition: k4a.hpp:828
void start_cameras(k4a_device_configuration_t *configuration)
Starts the K4A device&#39;s cameras Throws error on failure.
Definition: k4a.hpp:990
Wrapper for k4a_transformation_t.
Definition: k4a.hpp:758
The operation timed out.
Definition: k4atypes.h:250
image(k4a_image_t handle=nullptr) noexcept
Creates an image from a k4a_image_t.
Definition: k4a.hpp:88
device & operator=(device &&dev) noexcept
Moves another device into this device; other is set to invalid.
Definition: k4a.hpp:910
std::vector< uint8_t > get_raw_calibration() const
Get the raw calibration blob for the entire K4A device.
Definition: k4a.hpp:1096
int get_width_pixels() const noexcept
Get the image width in pixels.
Definition: k4a.hpp:289
IMU sample.
Definition: k4atypes.h:1114
std::chrono::microseconds get_exposure() const noexcept
Get the image exposure time in microseconds.
Definition: k4a.hpp:325
bool operator!=(const capture &other) const noexcept
Returns true if two captures wrap different k4a_capture_t instances, false otherwise.
Definition: k4a.hpp:478
bool convert_2d_to_2d(const k4a_float2_t &source_point2d, float source_depth, k4a_calibration_type_t source_camera, k4a_calibration_type_t target_camera, k4a_float2_t *target_point2d) const
Transform a 2d pixel coordinate with an associated depth value of the source camera into a 2d pixel c...
Definition: k4a.hpp:683
transformation & operator=(std::nullptr_t) noexcept
Invalidates this transformation.
Definition: k4a.hpp:804
Definition: k4a.hpp:20
std::chrono::microseconds get_device_timestamp() const noexcept
Get the image timestamp in microseconds.
Definition: k4a.hpp:316
k4a_result_t k4a_calibration_3d_to_2d(const k4a_calibration_t *calibration, const k4a_float3_t *source_point3d_mm, const k4a_calibration_type_t source_camera, const k4a_calibration_type_t target_camera, k4a_float2_t *target_point2d, int *valid)
Transform a 3D point of a source coordinate system into a 2D pixel coordinate of the target camera...
calibration get_calibration(k4a_depth_mode_t depth_mode, k4a_color_resolution_t color_resolution) const
Get the camera calibration for the entire K4A device, which is used for all transformation functions...
Definition: k4a.hpp:1121
void set_iso_speed(uint32_t iso_speed) noexcept
Set the ISO speed of the image (color images only)
Definition: k4a.hpp:379
void set_ir_image(const image &ir_image) noexcept
Set / add an IR image to the capture.
Definition: k4a.hpp:557
image & operator=(const image &other) noexcept
Sets image to a shallow copy of other.
Definition: k4a.hpp:114
static calibration get_from_raw(char *raw_calibration, size_t raw_calibration_size, k4a_depth_mode_t depth_mode, k4a_color_resolution_t color_resolution)
Get the camera calibration for a device from a raw calibration blob.
Definition: k4a.hpp:705
bool get_imu_sample(k4a_imu_sample_t *imu_sample, std::chrono::milliseconds timeout)
Reads an IMU sample.
Definition: k4a.hpp:969
capture(capture &&other) noexcept
Moves another capture into a new capture.
Definition: k4a.hpp:415
bool is_sync_in_connected() const
Get the device jack status for the synchronization in connector Throws error on failure.
Definition: k4a.hpp:1138
k4a_calibration_type_t
Calibration types.
Definition: k4atypes.h:606
image get_color_image() const noexcept
Get the color image associated with the capture.
Definition: k4a.hpp:512
static uint32_t get_installed_count() noexcept
Gets the number of connected devices.
Definition: k4a.hpp:1205
bool operator!=(std::nullptr_t) const noexcept
Returns true if the capture is valid, false otherwise.
Definition: k4a.hpp:485
void get_color_control(k4a_color_control_command_t command, k4a_color_control_mode_t *mode, int32_t *value) const
Get the K4A color sensor control value Throws error on failure.
Definition: k4a.hpp:1068
static image create_from_buffer(k4a_image_format_t format, int width_pixels, int height_pixels, int stride_bytes, uint8_t *buffer, size_t buffer_size, k4a_memory_destroy_cb_t *buffer_release_cb, void *buffer_release_cb_context)
Create an image from a pre-allocated buffer Throws error on failure.
Definition: k4a.hpp:223
k4a_result_t k4a_calibration_2d_to_2d(const k4a_calibration_t *calibration, const k4a_float2_t *source_point2d, const float source_depth_mm, const k4a_calibration_type_t source_camera, const k4a_calibration_type_t target_camera, k4a_float2_t *target_point2d, int *valid)
Transform a 2D pixel coordinate with an associated depth value of the source camera into a 2D pixel c...
void set_timestamp(std::chrono::microseconds timestamp) noexcept
Set the image&#39;s timestamp in microseconds.
Definition: k4a.hpp:352
bool convert_3d_to_2d(const k4a_float3_t &source_point3d, k4a_calibration_type_t source_camera, k4a_calibration_type_t target_camera, k4a_float2_t *target_point2d) const
Transform a 3d point of a source coordinate system into a 2d pixel coordinate of the target camera...
Definition: k4a.hpp:659
Wrapper for k4a_capture_t.
Definition: k4a.hpp:393
k4a_result_t k4a_calibration_3d_to_3d(const k4a_calibration_t *calibration, const k4a_float3_t *source_point3d_mm, const k4a_calibration_type_t source_camera, const k4a_calibration_type_t target_camera, k4a_float3_t *target_point3d_mm)
Transform a 3D point of a source coordinate system into a 3D point of the target coordinate system...
Three dimensional floating point vector.
Definition: k4atypes.h:1094
static calibration get_from_raw(std::vector< uint8_t > &raw_calibration, k4a_depth_mode_t depth_mode, k4a_color_resolution_t color_resolution)
Get the camera calibration for a device from a raw calibration blob.
Definition: k4a.hpp:742
bool operator!=(std::nullptr_t) const noexcept
Returns true if the image is valid, false otherwise.
Definition: k4a.hpp:172
capture(k4a_capture_t handle=nullptr) noexcept
Creates a capture from a k4a_capture_t Takes ownership of the handle, i.e.
Definition: k4a.hpp:401
static capture create()
Create an empty capture object.
Definition: k4a.hpp:585
transformation(k4a_transformation_t handle=nullptr) noexcept
Creates a transformation from a k4a_transformation_t Takes ownership of the handle, i.e.
Definition: k4a.hpp:772
k4a_color_control_mode_t
Color sensor control mode.
Definition: k4atypes.h:572
std::string get_serialnum() const
Get the K4A device serial number Throws error on failure.
Definition: k4a.hpp:1036
bool operator!=(const image &other) const noexcept
Returns true if two images wrap different k4a_image_t instances, false otherwise. ...
Definition: k4a.hpp:165
capture(const capture &other) noexcept
Creates a shallow copy of another capture.
Definition: k4a.hpp:405
k4a_image_format_t get_format() const noexcept
Get the image format of the image.
Definition: k4a.hpp:280
int get_height_pixels() const noexcept
Get the image height in pixels.
Definition: k4a.hpp:298
Handle to an Azure Kinect transformation context.
Definition: k4atypes.h:195
k4a_color_resolution_t
Color sensor resolutions.
Definition: k4atypes.h:307
float get_temperature_c() const noexcept
Get temperature (in Celsius) associated with the capture.
Definition: k4a.hpp:575
void() k4a_memory_destroy_cb_t(void *buffer, void *context)
Callback function for a memory object being destroyed.
Definition: k4atypes.h:807
void set_white_balance(uint32_t white_balance) noexcept
Set the white balance of the image (color images only)
Definition: k4a.hpp:370
k4a_result_t k4a_calibration_2d_to_3d(const k4a_calibration_t *calibration, const k4a_float2_t *source_point2d, const float source_depth_mm, const k4a_calibration_type_t source_camera, const k4a_calibration_type_t target_camera, k4a_float3_t *target_point3d_mm, int *valid)
Transform a 2D pixel coordinate with an associated depth value of the source camera into a 3D point o...
The result was successful.
Definition: k4atypes.h:219
device(k4a_device_t handle=nullptr) noexcept
Creates a device from a k4a_device_t Takes ownership of the handle, i.e.
Definition: k4a.hpp:890
void destroy() noexcept
Invalidates this transformation.
Definition: k4a.hpp:814
void stop_imu() noexcept
Stops the K4A IMU.
Definition: k4a.hpp:1026
uint32_t get_iso_speed() const noexcept
Get the image&#39;s ISO speed (color images only)
Definition: k4a.hpp:343
image & operator=(image &&other) noexcept
Moves another image into this image; other is set to invalid.
Definition: k4a.hpp:130
Wrapper for k4a_image_t.
Definition: k4a.hpp:80
void set_temperature_c(float temperature_c) noexcept
Set the temperature associated with the capture in Celsius.
Definition: k4a.hpp:566
image get_ir_image() const noexcept
Get the IR image associated with the capture.
Definition: k4a.hpp:530
bool convert_2d_to_3d(const k4a_float2_t &source_point2d, float source_depth, k4a_calibration_type_t source_camera, k4a_calibration_type_t target_camera, k4a_float3_t *target_point3d) const
Transform a 2d pixel coordinate with an associated depth value of the source camera into a 3d point o...
Definition: k4a.hpp:635
device(device &&dev) noexcept
Moves another device into a new device.
Definition: k4a.hpp:894
static calibration get_from_raw(uint8_t *raw_calibration, size_t raw_calibration_size, k4a_depth_mode_t depth_mode, k4a_color_resolution_t color_resolution)
Get the camera calibration for a device from a raw calibration blob.
Definition: k4a.hpp:726
image & operator=(std::nullptr_t) noexcept
Invalidates this image.
Definition: k4a.hpp:143
Handle to an Azure Kinect device.
Definition: k4atypes.h:66
uint8_t * get_buffer() noexcept
Get the image buffer.
Definition: k4a.hpp:253
void color_image_to_depth_camera(const image &depth_image, const image &color_image, image *transformed_color_image) const
Transforms the color image into the geometry of the depth camera.
Definition: k4a.hpp:844
Two dimensional floating point vector.
Definition: k4atypes.h:1075
bool operator==(std::nullptr_t) const noexcept
Returns false if the image is valid, true otherwise.
Definition: k4a.hpp:158
Handle to an Azure Kinect image.
Definition: k4atypes.h:173
image(image &&other) noexcept
Moves another image into a new image.
Definition: k4a.hpp:102
image(const image &other) noexcept
Creates a shallow copy of another image.
Definition: k4a.hpp:92
bool get_capture(capture *cap, std::chrono::milliseconds timeout)
Reads a sensor capture into cap.
Definition: k4a.hpp:946
Wrapper for k4a_device_t.
Definition: k4a.hpp:882
void depth_image_to_point_cloud(const image &depth_image, k4a_calibration_type_t camera, image *xyz_image) const
Transforms the depth image into 3 planar images representing X, Y and Z-coordinates of corresponding ...
Definition: k4a.hpp:863
Configuration parameters for an Azure Kinect device.
Definition: k4atypes.h:832
The result was a failure.
Definition: k4atypes.h:249
void stop_cameras() noexcept
Stops the K4A device&#39;s cameras.
Definition: k4a.hpp:1003
The input buffer was too small.
Definition: k4atypes.h:235
capture & operator=(std::nullptr_t) noexcept
Invalidates this capture.
Definition: k4a.hpp:456
bool operator==(const capture &other) const noexcept
Returns true if two captures refer to the same k4a_capture_t, false otherwise.
Definition: k4a.hpp:464
void set_color_control(k4a_color_control_command_t command, k4a_color_control_mode_t mode, int32_t value)
Set the K4A color sensor control value Throws error on failure.
Definition: k4a.hpp:1082
bool operator==(const image &other) const noexcept
Returns true if two images refer to the same k4a_image_t, false otherwise.
Definition: k4a.hpp:151
k4a_color_control_command_t
Color sensor control commands.
Definition: k4atypes.h:461
k4a_hardware_version_t get_version() const
Get the version numbers of the K4A subsystems&#39; firmware Throws error on failure.
Definition: k4a.hpp:1172
static image create(k4a_image_format_t format, int width_pixels, int height_pixels, int stride_bytes)
Create a blank image Throws error on failure.
Definition: k4a.hpp:207
Wrapper for k4a_calibration_t.
Definition: k4a.hpp:605
void start_imu()
Starts the K4A IMU Throws error on failure.
Definition: k4a.hpp:1013
k4a_wait_result_t
Result code returned by Azure Kinect APIs.
Definition: k4atypes.h:246
transformation & operator=(transformation &&other) noexcept
Moves another image into this image; other is set to invalid.
Definition: k4a.hpp:790
k4a_image_format_t
Image format type.
Definition: k4atypes.h:329
void close() noexcept
Closes a k4a device.
Definition: k4a.hpp:932
image get_depth_image() const noexcept
Get the depth image associated with the capture.
Definition: k4a.hpp:521
void reset() noexcept
Releases the underlying k4a_capture_t; the capture is set to invalid.
Definition: k4a.hpp:499