私はopenCVに使用できるフレームにrgbフレームを取得するためにcvSetDataを使用しています。 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ビデオを実行していましたが、メモリ不足のために最終的にクラッシュします。
イメージを適切にリリースするにはどうすればよいですか?