OpenKinect c — свободный доступ:: свободный доступ, свободный доступ

#c #kinect

#c #kinect

Вопрос:

У меня проблема с кодом, предоставляемым OpenKinect. Я пытаюсь использовать Kinect с c , но я получаю эту ошибку. В Интернете этот вопрос уже задавался, но я не нашел достойного ответа. Код такой:

 #include <cstdlib>
#include "libfreenect.h"
#include "libfreenect.hpp"
#include <pthread.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <cmath>
#include <vector>
#if defined(__APPLE__)
#include <GLUT/glut.h>
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#endif

using namespace std;

class Mutex {
    ...
};

class MyFreenectDevice : public Freenect::FreenectDevice {
    public:
    MyFreenectDevice(freenect_context *_ctx, int _index)
    : Freenect::FreenectDevice(_ctx, _index),
               m_buffer_depth(freenect_find_video_mode(FREENECT_RESOLUTION_MEDIUM, FREENECT_VIDEO_RGB).bytes),
               m_buffer_video(freenect_find_video_mode(FREENECT_RESOLUTION_MEDIUM, FREENECT_VIDEO_RGB).bytes),
               m_gamma(2048),
               m_new_rgb_frame(false),
               m_new_depth_frame(false)
    {
        for (unsigned int i = 0; i < 2048; i  ) {
            float v = i / 2048.0;
            v = std::pow(v, 3) * 6;
            m_gamma[i] = v * 6 * 256;
        }
    }
    ...

    private:
    std::vector<uint8_t> m_buffer_depth;
    std::vector<uint8_t> m_buffer_video;
    std::vector<uint16_t> m_gamma;
    Mutex m_rgb_mutex;
    Mutex m_depth_mutex;
    bool m_new_rgb_frame;
    bool m_new_depth_frame;
};

Freenect::Freenect freenect;
MyFreenectDevice* device;
freenect_video_format requested_format(FREENECT_VIDEO_RGB);
...
  

Я получаю сообщение об ошибке, не удается разрешить идентификатор идентификатора freenect для инструкции Freenect::Freenect freenect; .

Код этого шаблона находится в коде libfreenect.hpp:

 class Freenect : Noncopyable {
  private:
    typedef std::map<int, FreenectDevice*> DeviceMap;
  public:
  ...
    template <typename ConcreteDevice>
    ConcreteDeviceamp; createDevice(int _index) {
        DeviceMap::iterator it = m_devices.find(_index);
        if (it != m_devices.end()) delete it->second;
        ConcreteDevice * device = new ConcreteDevice(m_ctx, _index);
        m_devices.insert(std::make_pair<int, FreenectDevice*>(_index, device));
        return *device;
    }
    ... 
}
  

Я понятия не имею, в чем проблема, это официальный код, и он должен работать .. есть предложения? заранее спасибо

Комментарии:

1. Возможно, уже слишком поздно, но вы забыли связать библиотеки для libfreenect?

2. @zero298 Никогда не поздно! Я столкнулся с такой же проблемой, и ваш комментарий помог мне ее исправить. Я бы предложил добавить его в качестве ответа, чтобы мы могли проголосовать по нему.