요즘 한창 Image Processing에 관해서 공부를 하다가 제스처를 인식하여 마스크 효과를 적용해보면 어떨까하여 만들어 보았다. 이미지를 다루는 것이 아직도 서툴고 개념적으로 박히기에는 멀었다. 하지만 결과적으로는 재미있는 아웃풋이 나왔다.
우선, 제스처에 관련된 소스를 검색하여 개념을 익히는 일을 선행하였고, 이것을 어떻게 요리를 할 것인가에 대한 접근을 하면서 Step by Step으로 풀어나갔다.
코드의 중요 핵심은 제스처로 얻어낸 이미지를 어떠한 형태로 변형하여 마스크에 적용하느냐는 것이였다. 생각해 보면 그리 어렵지 않다고 판단했지만… 어려웠다.
우선 아래와 같이 Bitmap에 마스크를 적용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | _image = new Bitmap(new NightImage(0, 0), "auto", true); _image.x = 10; _image.y = 10; _image.width = _output.width; _image.height = _output.height; addChild(_image) _mask = new Bitmap(new BitmapData(_output.width, _output.height)); _mask.x = 10; _mask.y = 10; addChild(_mask); _image.mask = _mask; _image.cacheAsBitmap = true; _mask.cacheAsBitmap = true; |
위에서 보면 단순하지만 이미지 데이터는 쉽게 마스킹이 되지 않는다.
이미지 속성에 마스크를 적용하기 위해서는 “white & black” 으로만 적용을 할 수가 있다.
그래서 아래와 같이 캠 화면에 찍힌 이미지에 필터를 적용하여 반전을 시켜 흰색만을 추출해 내야 한다.
1 2 3 4 5 6 7 8 | _now.draw(_src, _mtx); _now.draw(_old, null, null, BlendMode.DIFFERENCE); _now.applyFilter(_now, _now.rect, new Point(), _col); _now.applyFilter(_now, _now.rect, new Point(), _blr); _now.threshold(_now, _now.rect, new Point(), '>', 0xFF333333, 0xFFFFFFFF); _old.draw(_src, _mtx); |
그리고 다음 코드와 같이 검은색을 알파 처리해서 적용하면 끝이다.
1 2 | _mask.bitmapData.threshold (_output.bitmapData, _output.bitmapData.rect, new Point(), '>', 0xFF000000, 0x00000000); |
요번 작업으로 많은 이미지 데이터 처리가 존재한다는 것을 알게되었다.
이러한 효과를 여러가지 형태로 응용이 가능해 보인다.
작업을 하면서 느낀점은 빛에 대한 처리가 가장 힘들다.
그리고, 플래시의 캠 인식 속도가 느려서 많은 것을 시도하기에는 어렵다는 것이다.
결론적으로, 플래시로도 요번과 같은 인식에 대한 것들을 제작할 수 있지만
프로토타입핑 수준이라고 생각된다.





















