Ask Your Question
0

visual studio 2013 with c++ do not show Depth image

asked 2016-11-23 05:42:28 -0600

ebrahimmasoomi gravatar image

updated 2016-11-23 05:51:44 -0600

berak gravatar image

Hi, I am a new user in Opencv. I wrote a simple code that is:

// emmb.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Kinect.h>
#include <iostream>
#include <opencv2\core.hpp>
#include <opencv2\video.hpp>
#include <opencv2\highgui.hpp>
typedef unsigned short unit16;
using namespace cv;
using namespace std;
template <class T> void SafeRelease(T **ppT)
{
    if (*ppT)
    {
        (*ppT)->Release();
        *ppT = NULL;
    }
};


int _tmain(int argc, _TCHAR* argv[])
{
    IKinectSensor* pSensor;
    HRESULT hResult = S_OK;
    hResult = GetDefaultKinectSensor(&pSensor);
    if (FAILED(hResult)){
        std::cout << "Error : GetDefaultKinectSensor" << std::endl;
        return -1;
    }
    hResult = pSensor->Open();
    if (FAILED(hResult)){
        std::cout << "Error : IKinectSensor::Open()" << std::endl;
        return -1;
    }
    IDepthFrameSource* pSource;
    hResult = pSensor->get_DepthFrameSource(&pSource);
    if (FAILED(hResult)){
        std::cout << "Error : IKinectSensor::get_FrameSource()" << std::endl;
        return -1;
    }
    IDepthFrameReader* pDepthReader;
    hResult = pSource->OpenReader(&pDepthReader);
    if (SUCCEEDED(hResult)){
        std::cout << "Error : IFrameSource::OpenReader()" << std::endl;
        return -1;
    }
    int l = 0;
    int Width = 512;   // ...... 1
    int Height = 424;
    cv::Mat BufferMat(Height, Width, CV_16UC1);   // ...... 3
    cv::Mat DepthMat(Height, Width, CV_8UC1);   // ...... 3
    cv::namedWindow("ebi");

    while (l<1){
        // Frame

        IDepthFrame* pDepthFrame = nullptr;
        hResult = pDepthReader->AcquireLatestFrame(&pDepthFrame);
        if (SUCCEEDED(hResult)){
            unsigned int bufferSize = 512 * 424 * sizeof(unsigned short);
            unsigned short* pBuffer = nullptr;
            hResult = pDepthFrame->AccessUnderlyingBuffer(&bufferSize, reinterpret_cast<UINT16**>(&BufferMat.data));
            if (SUCCEEDED(hResult)){
                /* Processing*/
                BufferMat.convertTo(DepthMat, CV_8U, -255.0f / 8000.0f, 255.0f);  
            }

        }


        SafeRelease(&pDepthFrame);
        cv::imshow("Depth", DepthMat);
        cv::waitKey(0);
        if (cv::waitKey(30) == VK_ESCAPE){
            break;
        }



        l++;
    }
    cin.get();
    return 0;

}

But the output in debugging is:

 'emmb.exe' (Win32): Loaded 'C:\Users\Ebi\Documents\Visual Studio 2013\Projects\emmb\Release\emmb.exe'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\Kinect20.dll'. Cannot find or open the PDB file.
'emmb.exe' (Win32): Loaded 'C:\opencv\build\x86\vc12\bin\opencv_core2413d.dll'. Cannot find or open the PDB file.
'emmb.exe' (Win32): Loaded 'C:\opencv\build\x86\vc12\bin\opencv_highgui2413d.dll'. Cannot find or open the PDB file.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp120.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr120.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr110.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp110.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\advapi32.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ole32.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\mfplat.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp120d.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr120d.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\user32.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\gdi32.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\oleaut32.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvfw32.dll'. Symbols loaded.
'emmb.exe' (Win32): Loaded 'C:\Windows\SysWOW64 ...
(more)
edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted
0

answered 2016-11-23 05:55:57 -0600

berak gravatar image

The thread 0x9bc has exited with code -1 (0xffffffff).

look at your code, it's probably one of those:

   if (FAILED(hResult)){
        std::cout << "Error : GetDefaultKinectSensor" << std::endl;
        return -1;
    }

(try to give them a disinctive return vale, so you can see, which one ecatly was triggered)

(also, maybe try to run your exe from cmdline (not from ide), so you can see, what got printed to stdout, you missed the message, because the window was closed immediately after the error)

edit flag offensive delete link more

Comments

I changed it:

 if (SUCCEEDED(hResult)){
            /* Processing*/
            BufferMat.convertTo(DepthMat, CV_8U, -255.0f / 8000.0f, 255.0f);  
        }

But a new message is:

First-chance exception at 0x55F07648 (opencv_highgui2413d.dll) in emmb.exe: 0xC0000005: Access violation reading location 0x00000068.

ebrahimmasoomi gravatar imageebrahimmasoomi ( 2016-11-23 06:23:52 -0600 )edit

Question Tools

1 follower

Stats

Asked: 2016-11-23 05:42:28 -0600

Seen: 528 times

Last updated: Nov 23 '16