티스토리 뷰

Processing

[Processing] ColorPicker in your Frame

생각많은 소심남 2012. 7. 4. 09:37

다시 돌아온 프로세싱입니다. 이번 포스트에서 해볼 내용은 마우스로 특정 포인트를 찝었을 때 그 픽셀의 RGB값을 구하는 어플입니다. 지난 포스트에서는 draw라는 함수를 통해서 해당 윈도우에 Depth와 Color를 출력하는 것을 구현했었는데 이번 것도 거의 비슷합니다. 다만 마우스를 클릭했을 때의 함수가 필요한데 프로세싱에서 참 편리하게도 그냥 mousePressed라는 함수를 가지고 있습니다. 그래서 기존 함수를 그대로 이용하면서 해당 코드만 가져오겠습니다.

 

 

모르시는 분을 위해서 간단하게 설명하자면 우선은 Setup부분에서 Kinect에서 필요한 기능을 다 불러와야 합니다. 마치 장치를 initialize시키는 것처럼 말이죠. 이런 구조는 보통 게임 구현시 나타납니다. 그도 그럴것이 Processing 자체가 매초 프레임을 그리면서 동작하기 때문에 setup부분과 그 매시간을 그리는 draw로 나눠지게 되는 것이죠. 그래서 그걸 그릴 창도 미리 지정을 해둘 겁니다.

 

자 이제 draw를 하면서 Kinect의 상태는 업데이트됩니다. 여러분들도 아시겠지만 Kinect는 그 동영상 자체를 컴퓨터로 보내는 것이 아니라 순간순간을 프레임화시켜서 보내줍니다. 즉 하나의 이미지인 것이죠. 보통 우리가 눈에 부드럽다고 보는 동영상의 프레임이 30fps 정도 됩니다. 즉 1초에 30번의 프레임이 그려지는 것입니다.

 draw의 주기는 우리의 눈이 인식하지 못할만큼 빠르기 때문에 그 순간동안 키넥트의 상태를 업데이트 한다면 하나의 부드러운 영상이 되겠지요. 그래서 각각을 이미지화한 후 창에다가 적용시킨 것이 draw함수의 역할이었습니다.

 

그러면 이제 관건이 되는 것이 mousePressed함수인데 이건 그냥 필요한 그때 그때 호출되는 함수 입니다. 일종의 트리거라고 보시면 될 것 같습니다. 그래서 get이란 함수를 쓰면 자신이 지정한 포인트의 정보를 받아올 수 있는건데 그걸 color변수로 받은 겁니다. 그래서 출력을 각각의 값을 다시 뿌려주는 것일뿐 어렵지 않은 코드 구조였습니다.

 

 참고로 제가 기존에 Processing 1.5를 쓰다가 이번에 2.0으로 옮겼는데 예전에는 draw나 setup함수가 표시가 안되서 조금 그랬었는데 2.0부터 그런면이 개선된 것 같습니다. 아무튼 결과는 다음과 같습니다.

 

 


마우스가 클릭되는 지점의 RGB값이 스케치툴상의 콘솔로 나타나고 있습니다. 키넥트는 외부환경의 적용을 받기 때문에 같은 곳을 클릭해도 색차이가 조금씩 나타납니다. 

댓글