▶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 |