我正在尝试使用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)。
任何帮助都是值得欣赏的。感谢