1

openni を使用して、ASUS Xtion PRO LIVE から RGB 画像ストリームを返すためのプラグインを作成しようとしていました。したがって、私のDLLプログラムでは、VideoFrameRefクラスのgetdata()関数を実装して、画像データからポインターを返します。テスト プログラムからこの関数を呼び出すと、例外がスローされます。

私のDLLコードを聞く

    void* MyRgbStrem::GetStream()
    {
        Device          device;     
        VideoStream     color;      
        VideoFrameRef   vframeRef; 
        VideoMode       vmode;      
        Status status = STATUS_OK;

        status = openni::OpenNI::initialize ();
        status = device.open(openni::ANY_DEVICE);
        status = color.create (device, SENSOR_COLOR);
        status = color.start();

        while (true)
        {
            if (device.getSensorInfo(SENSOR_COLOR) != NULL)
            {
                status = color. readFrame(&vframeRef);
                if (vframeRef.isValid())
                {
                    return ( uint16_t*) vframeRef.getData();
                }
            } 

        }
    }

and in the header file  i declar class MyRgbStrem

  namespace Rgbstream
{
    class MyRgbStrem
    {
    public:

     static __declspec(dllexport) void* GetStream();

    };
}

私のテストプログラムでは、画像処理にopencvを使用し、フレームの幅、高さ、サイズを取得するために、dllプログラムでさらにいくつかの関数を宣言し、テストアプリケーションでそれらを呼び出します

これは私がdllを呼び出すために使用するプログラムです

{
    Mat rgb,bgr;
    int height, width, size;

    height = Rgbstream::MyRgbStrem::GetFrameSize_H();
    width  = Rgbstream::MyRgbStrem::GetFrameSize_W();
    size    = Rgbstream::MyRgbStrem::getSizeOfData();

    bgr.create ( height,width, CV_8UC3);
    rgb.create (height,width, CV_8UC3);


        while (true)
    {
        const void* imgbuff = Rgbstream::MyRgbStrem::GetStream();

        memcpy (bgr.data, imgbuff, size );

        cvtColor(rgb,bgr, CV_RGB2BGR);
        namedWindow ("Color Video",CV_WINDOW_AUTOSIZE);
        imshow ("Color Video", bgr);

        char key = waitKey (10);
        if (key == 27) break;
    }
    return 0;

}

このプログラムを実行すると、このような例外がスローされます

CallRgbStream.exe の 0x0F97E89A (msvcr110d.dll) で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00268000。プログラム '[9544] CallRgbStream.exe' はコード 0 (0x0) で終了しました。

どんな助けでも大歓迎です。ありがとう

4

0 に答える 0