Skip to content

edisonslightbulbs/K4a

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

Helper class for working with Microsoft's K4a (kinect)
  • interface:
#include <k4a/k4a.h>
#include <mutex>

#include "point.h"

/** @struct t_config
 *    Kinect config
 *
 * @b Reference
 *    https://docs.microsoft.com/en-us/azure/kinect-dk/hardware-specification#depth-camera-supported-operating-modes
 */
struct t_config {
    const int32_t TIMEOUT = 1000;
    k4a_device_t m_device = nullptr;
    k4a_device_configuration_t m_config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
    t_config()
    {
        m_config.color_resolution = K4A_COLOR_RESOLUTION_720P;
        m_config.depth_mode = K4A_DEPTH_MODE_NFOV_UNBINNED; // 640 * 576
        m_config.color_format = K4A_IMAGE_FORMAT_COLOR_BGRA32;
        m_config.camera_fps = K4A_FRAMES_PER_SECOND_30;
        m_config.synchronized_images_only = true;
    }
};

extern const int RGB_TO_DEPTH;
extern const int DEPTH_TO_RGB;

/** @file kinect.h
 *    Kinect device.
 */
class Kinect {

public:
    std::mutex m_mutex;

    int32_t m_timeout = 0;
    k4a_device_t m_device;
    k4a_capture_t m_capture = nullptr;
    k4a_calibration_t m_calibration {};
    k4a_transformation_t m_transform = nullptr;

    k4a_image_t m_pcl = nullptr;   // point cloud
    k4a_image_t m_img = nullptr;   // color image
    k4a_image_t m_c2d = nullptr;   // color to depth image
    k4a_image_t m_d2c = nullptr;   // depth to color image
    k4a_image_t m_xyT = nullptr;   // xy table
    k4a_image_t m_xyPcl = nullptr; // point cloud from xy table
    k4a_image_t m_depth = nullptr; // depth image

    /** capture
     *   Captures images using k4a device.
     */
    void capture();

    /** transform
     *   Carries out requested transformation.
     *
     * @param transformFlag
     *   Flag for transformation types, i.e.,
     *   RGB_TO_DEPTH & DEPTH_TO_RGB
     */
    void transform(const int& transformFlag);

    /**
     * xyLookupTable
     *   Pre-computes a lookup table by storing x and y depth
     *   scale factors for every pixel.
     *
     * @param ptr_calibration
     *   Calibration for the kinect device in question.
     *
     * @param depthImg
     *   Depth map captured by the kinect device.
     */
    static void xyLookupTable(
        const k4a_calibration_t* ptr_calibration, k4a_image_t depthImg);

    /** close
     *   Closes k4a device.
     */
    void close() const;

    void releaseK4aImages() const;
    void releaseK4aCapture() const;
    __attribute__((unused)) void releaseK4aTransform();

    void xyTable();
    void imgCapture();
    void pclCapture();
    void c2dCapture();
    void depthCapture();

    Kinect();
    ~Kinect();

};
  • usage:
#include "kinect.h"  // <- include header

int main(int argc, char* argv[])
{

   Kinect kinect();

   kinect.capture();
   kinect.depthCapture();
   kinect.pclCapture();
   kinect.imgCapture();
   kinect.c2dCapture();
   kinect.transform(RGB_TO_DEPTH);

   auto* ptr_k4aImgData = k4a_image_get_buffer(kinect.m_c2d);
   auto* ptr_k4aPCloudData = (int16_t*)(void*)k4a_image_get_buffer(kinect.m_pcl);
   auto* ptr_k4aDepthData = (uint16_t*)(void*)k4a_image_get_buffer(kinect.m_depth);
   auto* ptr_k4aTableData = (k4a_float2_t*)(void*)k4a_image_get_buffer(kinect.m_xyT);

   // ------> do stuff data <-----

   // ------> do stuff data <-----

   kinect.releaseK4aImages();
   kinect.releaseK4aCapture();
   return 0;
}

About

A helper class for working with the k4a Kinect

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages