Получение нулевого значения в QueryVertices() — Intel Real Sense F200

Я хочу найти координаты из QueryVertices(), но получаю нулевое значение при его выполнении.

Фрагмент кода-

public class CameraViewer2
{    
    static int cWidth  = 640;    //Color image width
    static int cHeight = 480;    //Color image height
    static int dWidth, dHeight;    //depth image width and height
    static boolean exit = false;//flag

public static void main(String s[])
{ 

    PXCMSenseManager senseMgr = PXCMSenseManager.CreateInstance();     //Create a session manager instance   
    pxcmStatus sts = senseMgr.EnableStream(PXCMCapture.StreamType.STREAM_TYPE_COLOR, cWidth, cHeight);    //STREAM_TYPE_COLOR The color stream.
    sts = senseMgr.EnableStream(PXCMCapture.StreamType.STREAM_TYPE_DEPTH,cWidth,cHeight);    //STREAM_TYPE_DEPTH The depth stream.
    sts = senseMgr.Init(); //initialize the Manager

    //getting the profile data 
    PXCMCapture.Device device = senseMgr.QueryCaptureManager().QueryDevice();
    PXCMCapture.Device.StreamProfileSet profiles = new PXCMCapture.Device.StreamProfileSet();
    device.QueryStreamProfileSet(profiles);

    dWidth = profiles.depth.imageInfo.width;
    dHeight = profiles.depth.imageInfo.height;

    Listener listener = new Listener();

    if (sts == pxcmStatus.PXCM_STATUS_NO_ERROR)
    {
        while (listener.exit == false)
        {
            sts = senseMgr.AcquireFrame(true);    //Wait until a new frame is available and lock it for processing.
            if (sts == pxcmStatus.PXCM_STATUS_NO_ERROR)
            { 
                 PXCMCapture.Sample sample = senseMgr.QuerySample();    // retrieve the color and depth samples aligned
                if (sample.color != null)
                {  
                    PXCMImage depth= sample.depth;
                    PXCMImage color= sample.color;
                    PXCMProjection projection=device.CreateProjection();// Create the PXCMProjection instance.             
                    PXCMImage mappedColorImage=projection.CreateColorImageMappedToDepth( depth,  color);

                   PXCMPoint3DF32[] vertices = new PXCMPoint3DF32[cWidth * cHeight];
                   System.out.println(projection.QueryVertices(depth, vertices));   //getting in console- PXCM_STATUS_NO_ERROR

Есть ли какие-либо другие способы получить координаты. Любая помощь будет оценена.

заранее спасибо.


person AmanS    schedule 27.04.2016    source источник
comment
Возможный дубликат Что такое нулевой указатель Исключение и как его исправить?   -  person Seth    schedule 27.04.2016
comment
Да, я знаю, что такое исключение нулевого указателя... проблема, с которой я сталкиваюсь, заключается в том, что я получаю NULL в массиве вершин...   -  person AmanS    schedule 27.04.2016
comment
Почитайте что-нибудь про массивы, это займет у вас 5 минут и вы, вероятно, разберетесь в вопросе еще до этого c: И подумайте о значении NPE :)   -  person Seth    schedule 27.04.2016
comment
Я хорошо разбираюсь в массивах и NPE... Я думаю, проблема здесь специфична для API Intel RealSense... может быть, я не следую правильному пути... приведенный выше код работает правильно и не дает никаких исключений/ ошибка в противном случае, также метод queryvertices возвращает PXCM_STATUS_NO_ERROR   -  person AmanS    schedule 28.04.2016


Ответы (1)


Ваш массив вершин должен иметь размер изображения глубины, а не цветного изображения, поскольку вы получаете вершину для каждого пикселя изображения глубины. Поэтому используйте вместо этого PXCMPoint3DF32[] vertices = new PXCMPoint3DF32[dWidth * dHeight];.

person jb455    schedule 11.05.2016
comment
Привет @ jb455, спасибо за ваш ответ ... я изменил ' PXCMPoint3DF32 [] vertices = new PXCMPoint3DF32 [cWidth * cHeight]; ' to ' PXCMPoint3DF32[] vertices = new PXCMPoint3DF32[dWidth * dHeight]; '...все еще я получаю нулевые значения в массиве вершин... - person AmanS; 13.05.2016
comment
Хм, все, что вы сделали, это то же самое, что я сделал на C#, и это работает... Другой способ получения вершин — использование projection.ProjectColorToCamera, может быть, попробовать взглянуть на это? Это немного неудобно, так как по какой-то причине вам нужно сначала сопоставить значения глубины с цветовыми точками. - person jb455; 13.05.2016