▶Processing :: 프로세싱 기초예제 – video #2
'시각화'에서 비디오를 다루는 것 만큼 재미있는 것은 없지요^^
오늘은 지난 포스팅에 이어서 <프로세싱에서의 video다루기>를 살펴보겠습니다.
프로세싱 기초예제 video #1 바로가기
그럼 시작해보겠습니다.
import processing.video.*;
가장 먼저 잊지말고 해야할 부분이지요~
프로세싱의 비디오 라이브러리를 로드해줍니다.
Capture cam; color trackColor;
그 다음으로는
캡처를 하기위한 'cam' 변수와
색상을 찾을 때 이용할 'trackColor'변수를 만들어줍니다.
다음으로 setup()부분을 먼저 살펴보겠습니다
void setup(){ size(640, 480); trackColor = color(255, 0, 0); // 추적하고자하는 색상을 red로 설정하는 부분 String[] cameras = Capture.list(); if(cameras.length == 0){ println("There are no cameras available for captrue."); exit(); } else { println("Available cameras"); for(int i = 0; i < cameras.length; i++){ println(cameras[i]); } cam = new Capture(this, cameras[0]); cam.start(); } }
여기까지는 지난 video 기초예제#1과 크게 다르지 않습니다.
trackColor부분이 추가되었다는 것 말고는 동일한 형태입니다.
그럼 이제 draw()부분으로 넘어가보겠습니다.
void draw(){ //available()함수로 이미지 존재유무에따라 '참/거짓'을 반환하기 if(cam.available() == true) { cam.read(); // 참이라면, 캡쳐한 정보를 가져오기 } // tint(mouseX, mouseY, 255); cam.loadPixels(); // cam의 픽셀정보를 가져오기 image(cam, 0, 0); // cam을 출력하는 부분 // image(cam, 0, 0, mouseX, mouseY); // 가장 가짜운 픽셀의 '세계기록'을 높은 수치로 설정하기! // 이는 첫번째 픽셀을 쉽게 이기기 위함이다. float worldRecord = 500; int closetX = 0; int closetY = 0; //여기서부터 모든 픽셀을 훑어내려가는 부분! for(int x = 0; x < cam.width; x++){ // x는 0부터 cam의 width값까지 for(int y = 0; y < cam.height; y++){ // y는 0부터 cam의 height값까지 int loc = x+y * cam.width; // 현재의 색상! color currentColor = cam.pixels[loc]; float r1 = red(currentColor); float g1 = green(currentColor); float b1 = blue(currentColor); float r2 = red(trackColor); float g2 = green(trackColor); float b2 = blue(trackColor); // 색상비교를위해 유클리드 함수를 사용합니다. float d = dist(r1, g1, b1, r2, g2, b2); //만약! 현재색상이 가장 가까운 색상보다 추적한 색상에 가깝다면, // 현재의 장소와 다른 정도를 저장합니다. if(d < worldRecord){ worldRecord = d; closetX = x; closetY = y; } } } //아래의 if함수로인해 색 차이값이 10이하인 부분에만 적용됩니다. if(worldRecord < 10){ fill(trackColor); strokeWeight(4.0); stroke(0); ellipse(closetX, closetY, 16, 16); } }
꽤 길지요?ㅎㅎ
그래서 중간중간에 주석을 달아두었습니다.
아직 끝은 아닙니다^^;
조금만 더 가보겠습니다.
void mousePressed(){ int loc = mouseX + mouseY * cam.width; trackColor = cam.pixels[loc]; }
mousePressed()함수를 사용하여
클릭한 지점의 픽셀이 가지고 있는 색상값을 track변수에 저장하게합니다.
결과를 살펴볼까요?
[프로세싱기초예제 비디오 - 색상추적하기]
'시각화 > 프로세싱' 카테고리의 다른 글
▶Processing :: 프로세싱 기초예제 – video #4 - 움직임 추적하기 + 원 그리기 (3) | 2014.05.30 |
---|---|
▶Processing :: 프로세싱 기초예제 – video #3 움직임 감지하기 (5) | 2014.05.29 |
▶Processing :: 프로세싱 기초예제 – video #1 (8) | 2014.05.29 |
▶ Processing :: 프로세싱 기초예제 - 문자열(string)파헤치기 (2) | 2014.05.08 |
▶ Processing :: 프로세싱 기초예제 - 픽셀 (0) | 2014.05.03 |