영상처리를 하는 많은 사람들이 OpenCV를 접해 봤을 것이고 많이 사용하고 있기 때문에
연구용으로 OpenCV와 Kinect를 연동할 필요가 있다.
따라서 OpenCV에서 Kinect를 사용할 수 있도록 CL-NUI-Platform을 설치하고 라이브러리를 가져다가 쓴다.
너무너무너무 쉽게 OpenCV에서 가져다가 쓸 수 있다.
일단 CL-NUI-Platform-1.0.0.1121.exe파일을 설치하고 도구-옵션에 가셔서 include와 lib폴더를 추가시켜준다.
그리고 lib, dll파일은 해당 프로젝트 파일에 셋팅 시키면된다.(OpenCV를 쓰는 사람들이라면 다들 한 번씩 해봤기 때문에
자세한 설명은 생략하도록 하겠다.)
설치도 완료하고 셋팅도 다 되었다면, 매우 간단하게 소스를 작성해보자.
#include <stdio.h>
#include <highgui.h>
#include <cv.h>
#include <CLNUIDevice.h>
int main()
{
int nRetCode = 0;
IplImage *img_color;
IplImage *img_depth;
img_color = cvCreateImage(cvSize(640,480), 8U, 3);
img_depth= cvCreateImage(cvSize(640,480), 8U, 4);
CLNUICamera KinectCamera = CreateNUICamera();
if(!StartNUICamera(KinectCamera))
{
printf("Could Not Start Kinect Camera");
nRetCode = 1;
return nRetCode;
}
PDWORD datadepth = (PDWORD) malloc(640*480*4);
PBYTE datacolor = (PBYTE) malloc(640*480*3);
PUSHORT m_pDepthRaw;// = (PUSHORT) malloc(640*480); // 우선 뎁스값 받아들이기 위한 배열 선언
m_pDepthRaw = new USHORT[640*480]; // 메모리 생성
cvNamedWindow( "Depth", 1 );
cvNamedWindow( "RGB", 1 );
while(1)
{
GetNUICameraDepthFrameRGB32(KinectCamera, datadepth, 0);
cvSetData(img_depth, datadepth, img_depth->widthStep);
GetNUICameraColorFrameRGB24(KinectCamera, datacolor, 0);
cvSetData(img_color, datacolor, img_color->widthStep);
GetNUICameraDepthFrameRAW(KinectCamera, m_pDepthRaw, 0); // CL NUI API
cvShowImage( "Depth", img_depth);
cvShowImage( "RGB", img_color);
if( cvWaitKey(1) == 'q')
{
cvSaveImage("rgb.jpg",img_color);
cvSaveImage("depth.bmp",img_depth);
break;
}
}
StopNUICamera(KinectCamera);
cvDestroyWindow("Depth");
cvDestroyWindow("RGB");
cvReleaseImage(&img_color);
cvReleaseImage(&img_depth);
return 0;
}
난 설치를 잘못했는지 CLNUICamera를 못 읽어와서 헤맸는데 다시 지우고 처음부터 설치하니깐 해결됐다.
위 소스를 실행 시키면 결과는 다음과 같이 나온다. Depth에 따라서 컬러가 다르게 나옴
'영상처리 > OpenKinect' 카테고리의 다른 글
Open Kinect (OpenNI 설치 및 실행) (6) | 2011.01.04 |
---|
댓글