PGraphics 관련 질문드립니다!

by jamessss posted Apr 12, 2018
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

+ - Up Down Comment Print

안녕하세요 PGraphics 관련 질문 드립니다. 원하는 색상값만을 비디오에서 추출하여 PGraphics 로 layer 생성 후 비디오 배경 없이 저장할려고 하는데 

문제는 원하는 값을 추출은 잘하는데 PGraphics 가 layer 개념이라 그런지, 코드를 잘못이해해서 그런지 원하는 색상값만 실시간으로 잡는것이 아닌 비디오 시작부터 끝까지 색상값을 계속 그려버리는(?) 문제가 생기고 있습니다. 

(글을 잘 못써서..예를 들어 캠으로 받아들인 비디오에 빨간색 펜뚜껑이 있으면 실시간으로 빨간색 펜뚜껑 부분만 tracking 해야 하는데 PGraphics 를 쓰면 빨간펜뚜껑이 움직이며 지나간 흔적을 그려버리고 있는 문제가 있습니다 ㅠㅠ) 


밑에 코드는 제가 코딩한 것인데 아마 for문에서? 뭔가 고쳐야 할거 같은데 어떤 부분을 고치거나 다른 reference 를 참고해야할까요 ? 


답변 주시면 정말 감사하겠습니다!!



    

    import processing.video.*;

    

    Capture video;

    

    color trackColor= color(145,43,54);

    float threshold = 25;

    PGraphics topLayer;

    

    float r2;

    float g2;

    float b2;

    

    float distSq(float x1, float y1, float z1, float x2, float y2, float z2) {

      float d = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) +(z2-z1)*(z2-z1);

      return d;

    }

    

    void setup() {

      size(640, 360);

      String[] cameras = Capture.list();

      printArray(cameras);

      video = new Capture(this, cameras[3]);

      video.start();

      trackColor = color(145,43,54);

      topLayer = createGraphics(width, height, g.getClass().getName());

    }

    

    void captureEvent(Capture video) {

      video.read();

    }

    

    void draw() {

    

      video.loadPixels();

      image(video, 0, 0);

    

      //threshold = map(mouseX, 0, width, 0, 100);

      threshold = 50;

      float thresholdSquare = threshold * threshold;

      

      

      // Begin loop to walk through every pixel

      for (int x = 0; x < video.width; x++ ) {

        for (int y = 0; y < video.height; y++ ) {

          int loc = x + y * video.width;

          // What is current color

          color currentColor = video.pixels[loc];

          float r1 = (currentColor>>16)&0xFF;

          float g1 = (currentColor>>7) & 0xFF ;

          float b1 = (currentColor) & 0xFF;

          r2 = (trackColor>>16)&0xFF;

          g2 = (trackColor>>7) & 0xFF;

          b2 = (trackColor) & 0xFF;

          float d = distSq(r1, g1, b1, r2, g2, b2); 

          if (d < thresholdSquare) {

            //worldRecord = d;

            topLayer.beginDraw();

            topLayer.stroke(trackColor);

            topLayer.noStroke();

            topLayer.fill(trackColor);

            topLayer.ellipse(x, y,1,1);        

         ////////////////////////////////////////

            topLayer.endDraw();

            image(topLayer, 0, 0);

       }

      }

     } 

        if(mousePressed){

          topLayer.save("example.jpg");

        }

    }

  • profile
    smileblue 2018.04.15 09:18

    if (d < thresholdSquare) {

                //worldRecord = d;

                topLayer.beginDraw();

                topLayer.stroke(trackColor);

          topLayer.background(0,0);

                topLayer.noStroke();

                topLayer.fill(trackColor);

                topLayer.ellipse(x, y,1,1);        

             ////////////////////////////////////////

                topLayer.endDraw();

                image(topLayer, 0, 0);

           }


    아마 이렇게 하면 투명이면서 이전 프레임의 영상은 나오지 않게 저장 될것 같은데요..


Articles

1 2 3 4 5 6 7 8 9 10

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5