본문 바로가기

Out of Mind/Kinect

3. RGB + Depth 영상 띄우기

본 실험은..

Kinect SDK v1.0 (2012.2.1) 으로 했기 때문에 약간 이전의 소스와 다를 수 있으며 참고 되는 내용이 다를 수 있음을 명시합니다.

기존의 작업 했던 영상 출력을 다시 바꾸기 위한 시도를 했습니다.

그 와중 바뀐 부분을 먼저 명시 하고 갑니다.

추가 폴더와 lib 폴더를 beta2 위치에서부터 바꿔주고 시작합니다.

포함 폴더 C:\Program Files\Microsoft SDKs\Kinect\v1.0\inc

라이브러리 폴더 C:\Program Files\Microsoft SDKs\Kinect\v1.0\lib\x86

프로젝트 속성에 가면 구성요소 중

 
폴더가 아니라 디렉터리 로 되어 있네요.

추가해주세요. lib는 amd64 도 있으니 본인 컴퓨터에 맞게끔 해주시기 바랍니다.

또 속성에서 구성 속성 링커 추가종속성에 Kinect10.lib 추가해주세요.

lib 파일이 바뀐게 흐음 예전꺼랑 이름이 많이 바뀌었네요.


그 다음에 가볍게 함수 몇개 소개하고 일단 출력해보도록 하겠습니다.

winapi로 할 것이라서 쫌 다를 수 있네요.

1. NuiInitialize(DWORD dwFlags)
dwFlags
The subsystems that the application uses, as a bitwise-OR'd combination of the following flags:
NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX
NUI_INITIALIZE_FLAG_USES_COLOR
NUI_INITIALIZE_FLAG_USES_SKELETON
NUI_INITIALIZE_FLAG_USES_DEPTH

초기화 인데요. 무엇을 쓸 것인지 같이 나열을 해주면 됩니다. 위에 영어로 살짝 나와 있는데 OR 연산을 한다고 하네요.

아 바껴서 AUDIO도 있는데 전 AUDIO를 안할 것이니 넘어가도록 합니다.

#define NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX 0x00000001
#define NUI_INITIALIZE_FLAG_USES_COLOR                  0x00000002
#define NUI_INITIALIZE_FLAG_USES_SKELETON               0x00000008  
#define NUI_INITIALIZE_FLAG_USES_DEPTH                  0x00000020 

아 이렇게 정의가 되있군요 16진수니깐 서로가 서로끼리 영향을 주지 않아서 Bit OR 연산해도 상관없겠네요.

다음과 같이 초기화 해주시면 됩니다.

NuiInitialize(NUI_INITIALIZE_FLAG_USES_COLOR | NUI_INITIALIZE_FLAG_USES_DEPTH );

2. NuiShutdown()

이 함수는 사용이 끝나고 초기화 해놓은 센서를 종료할 때 씁니다.

3. NuiImageStreamOpen(eImageType, eResolution, dwImageFrameFlags, dwFrameLimit, hNextFrameEvent, *phStreamHandle)

위 함수로 카메라 데이터를 저장할 때 씁니다.

아규먼트의 정리는 다음과 같습니다.
 1) NUI_IMAGE_TYPE eImageType
NUI_IMAGE_TYPE_COLOR
NUI_IMAGE_TYPE_COLOR_RAW_YUV
NUI_IMAGE_TYPE_COLOR_YUV
NUI_IMAGE_TYPE_DEPTH
NUI_IMAGE_TYPE_DEPTH_AND_PLAYER_INDEX

어떤 타입의 영상을 열 것인가 인데요. 다음 정보와 같이 중요한 부분이라 같이 갑니다.

 2) NUI_IMAGE_RESOLUTION eResolution
NUI_IMAGE_RESOLUTION_80x60
NUI_IMAGE_RESOLUTION_320x240
NUI_IMAGE_RESOLUTION_640x480
NUI_IMAGE_RESOLUTION_1280x960 // beta2 에선 1280x1024 였습니다.

Beta2랑은 살짝 바뀐게 있어서 살짝 정리하고 갑니다. 

NUI_IMAGE_TYPE_COLOR
 NUI_IMAGE_RESOULUTION_1280x960
 NUI_IMAGE_RESOULUTION_640x480

NUI_IMAGE_TYPE_COLOR_RAW_YUV
 NUI_IMAGE_RESOULUTION_640x480

NUI_IMAGE_TYPE_COLOR_YUV
 NUI_IMAGE_RESOULUTION_640x480

NUI_IMAGE_TYPE_DEPTH
 NUI_IMAGE_RESOULUTION_640x480
 NUI_IMAGE_RESOULUTION_320x240
 NUI_IMAGE_RESOULUTION_80x60

NUI_IMAGE_TYPE_DEPTH_AND_PLAYER_INDEX
 x
 
아 그리고 실험해본 결과 변경된게 하나 더 있었는데,
NUI_IMAGE_TYPE_DEPTH 가 좌우가 반대로 나왔던거에서 이제는 제대로 보이게 나오고요,
NUI_IMAGE_TYPE_DEPTH_AND_PLAYER_INDEX  는 맞는 resolution이 없어서 이제 안쓸꺼 같네요.
왜 아직 남아 있는지는 모르겠고요.

 3) DWORD dwImageFrameFlags
이전 버전에선 사용하지 않음이 붙어 있었는데 현재 버전에선 그 단어가 떨어졌네요.
그래도 예저에선 0으로 놓고 넘어갔습니다.
 
 4) DWORD dwFrameLimit
NUI 실행시간에 가질 수 있는 최대 프레임 수
기본 값은 최대 4 이지만 보통 2를 사용

 5) HANDLE hNextFrameEvent
Kinect로 다음 영상을 받을 이벤트 생성. 모든 설정 리셋

 6) HANDLE phStreamHandle
영상 데이터를 받을 때 사용하는 핸들

4. NuiImageStreamGetNextFrame(hStream, dvMillisecondsToWait, **ppcImageFrame)
다음 영상을 지정된 시간 이후로 값을 가져옵니다.
 
1)HANDLE hStream 
NuiImageStreamOpen에 의해 만들어진 이미지 스트림 핸들.

 2)DWORD dwMillisecondsToWait 
새로운 frame을 기다리는 시간(ms).

 3)NUI_IMAGE_FRAME** ppcImageFrame 
데이터를받을 NUI_IMAGE_FRAME 구조에 대한 포인터. 

함수는 이정도로 하고요.

KINECT_LOCKED_RECT  -> NUI_LOCKED_RECT

중간에 자료형이 바뀐거 하나 있어서 알려드리고 갑니다.

beta버전과 이름이 바뀐 스트럭트네요. 확인해주시고 예전코드 안된다고 하지마세요.ㅎ

 
다음과 같이 잘 나오고요~

전 잘 나오네요.

다음에는 Skeleton을 띄어보도록 하겠습니다.

중요한건 아닌데..

계속 미루지만 않으면 좋겠네요~ㅎ 

'Out of Mind > Kinect' 카테고리의 다른 글

Depth 영상 값의 추정.  (1) 2012.02.03
v1.0 Beta2 -> v1.0 바뀐부분 정리  (0) 2012.02.02
2. Kinect Install  (0) 2012.02.02
1. Kinect Introduce  (0) 2012.01.18
Kinect에 대한 짧은 소개  (0) 2012.01.04