虹吸成Pixelflow捕获液

时间:2017-06-19 00:16:07

标签: java processing opticalflow syphon

我是一名正在处理草图的菜鸟,它将网络摄像头输入作为输入并应用光流和粒子效果。草图称为OpticalFlow_CaptureFluid。它来自Thomas Diewald的PixelFlow库。

基本上,我想修改CaptureFluid草图,以便它采用虹吸输入而不是网络摄像头输入。

我看过虹吸的光流草图和ReceiveFrames草图。我有点理解每个草图的不同部分在做什么,但因为我不是一个编码器,所以我很少想到如何将它们组合在一起,以便光流草图从虹吸管接收框架。

这是ReceiveFrames草图:

import codeanticode.syphon.*;

PGraphics canvas;
SyphonClient client;

void settings() {
  size(640, 480, P3D);
  PJOGL.profile = 1;
}

public void setup() {
  // Create syhpon client to receive frames 
  // from the first available running server: 
  client = new SyphonClient(this);

  background(0);
}

public void draw() {    
  if (client.newFrame()) {
    canvas = client.getGraphics(canvas);
    image(canvas, 0, 0, width, height);    
  }  
}

光流量草图很大,所以我只包含了我认为最相关的位。整个草图在上面链接。 (也会在这里发布,但我是新手,他们不会让我发布超过两个链接!)

OpticalFlow_CaptureFluid(摘录)

import processing.opengl.PGraphics2D;
import processing.video.Capture;

        // webcam capture
        cam = new Capture(this, cam_w, cam_h, 30);
        cam.start();

        // render buffers
        pg_cam_a = (PGraphics2D) createGraphics(cam_w, cam_h, P2D);
        pg_cam_a.noSmooth();
        pg_cam_a.beginDraw();
        pg_cam_a.background(0);
        pg_cam_a.endDraw();

        pg_cam_b = (PGraphics2D) createGraphics(cam_w, cam_h, P2D);
        pg_cam_b.noSmooth();

        pg_fluid = (PGraphics2D) createGraphics(view_w, view_h, P2D);
        pg_fluid.smooth(4);


      public void draw() {

        if( cam.available() ){
          cam.read();

          // render to offscreenbuffer
          pg_cam_b.beginDraw();
          pg_cam_b.background(0);
          pg_cam_b.image(cam, 0, 0);
          pg_cam_b.endDraw();
          swapCamBuffer(); // "pg_cam_a" has the image now

          if(APPLY_BILATERAL){
            filter.bilateral.apply(pg_cam_a, pg_cam_b, 5, 0.10f, 4);
            swapCamBuffer();
          }

          // update Optical Flow
          opticalflow.update(pg_cam_a);

我知道我需要添加“import codeanticode.syphon。*;”到CaptureFluid草图,摆脱网络摄像头捕获位,并用新的虹吸客户端替换它。我想所有的pg_cam_a和pg_cam_b变量都需要重命名或以某种方式修改。我甚至都不明白他们在做什么。

好的,最后一件事:我找到了this post这个正在用Siphon发送和删除草图的人。他说这只适用于P3D模式,但这个CaptureFluid草图使用P2D。我在上面发布的ReceiveFrames草图使用P3D(请参阅void设置下的大小),但我将其更改为P2D并且它似乎工作得很好,所以我不确定这是否真的是一个问题。

提前致谢!

1 个答案:

答案 0 :(得分:0)

你的问题有点宽泛,但我可以尝试在一般意义上提供帮助。

首先,您可能不想听到的内容:您将很难在互联网上找到代码,如果您不愿意做任何您想做的事情。我真的明白它是如何运作的。你说你不是一个真正的编码员,那没关系!那里有大量的教程(无耻的自我推销:here是我写的一些),可以帮助您更好地理解代码。您的目标应该是在尝试使用它们之前理解每个草图。

现在,来"结合"两个程序,你真正想做的是从空白草图重新开始。这可能看似矛盾,但是在空白草图中添加东西要比拿东西容易得多在现有草图之外。

然后问题是breaking your problem down into smaller steps并且一次一个地接受这些步骤。 从小处开始(小于您认为的有趣)并以非常小的步骤向前迈进。

例如,您说您想使用Siphon Feed。在继续前进之前要完美地工作。我认为您实际上已经有了执行此操作的代码,但请确保您确切了解其工作原理:例如,您需要了解canvasclient变量如何协同工作。

然后你需要以小步骤前进。不要尝试复制和粘贴整个光流程序。隔离您可以找到的最简单的功能 - 一次只需几行代码。使用您的虹吸饲料。例如,尝试根据虹吸进给绘制一个简单的形状。

然后继续按照这样的小步骤前进。继续问自己,我知道自己需要做的最小的事情是什么?去做。在继续下一步之前,让它完美运行。

如果您遇到某个特定步骤,那么您可以发布一个MCVE以及一个特定的技术问题,我们将从那里开始。祝你好运。