我使用cvSetData得到RGB幀到一個我可以使用OpenCV的。 我稍微修改了SkeletalViewer以產生rgb流。內存問題與cvShowImage和Kinect SDK:骨骼瀏覽器
void CSkeletalViewerApp::Nui_GotVideoAlert()
{
const NUI_IMAGE_FRAME * pImageFrame = NULL;
IplImage* kinectColorImage = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U, 4);
HRESULT hr = NuiImageStreamGetNextFrame(
m_pVideoStreamHandle,
0,
&pImageFrame);
if(FAILED(hr))
{
return;
}
NuiImageBuffer * pTexture = pImageFrame->pFrameTexture;
KINECT_LOCKED_RECT LockedRect;
pTexture->LockRect(0, &LockedRect, NULL, 0);
if(LockedRect.Pitch != 0)
{
BYTE * pBuffer = (BYTE*) LockedRect.pBits;
m_DrawVideo.DrawFrame((BYTE*) pBuffer);
cvSetData(kinectColorImage, (BYTE*) pBuffer,kinectColorImage->widthStep);
cvShowImage("Color Image", kinectColorImage);
//cvReleaseImage(&kinectColorImage);
cvWaitKey(10);
}
else
{
OutputDebugString(L"Buffer length of received texture is bogus\r\n");
}
cvReleaseImage(&kinectColorImage);
NuiImageStreamReleaseFrame(m_pVideoStreamHandle, pImageFrame);
}
隨着cvReleaseImage,我會得到一個cvException錯誤。不完全確定哪一個,因爲它沒有指定。沒有cvReleaseImage,我會得到在openCV窗口中運行的rgb視頻,但最終會因爲內存不足而崩潰。
我應該如何正確釋放的形象呢?