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

基本上,我想修改CaptureFluid草图,以使其采用虹吸提要而不是网络摄像头提要。

我看过Syphon的Optical Flow草图和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变量都需要重命名或以某种方式修改。我什至不真正了解他们在做什么。

好的,最后一件事:我发现这个家伙向Syphon发送帧进出草图时发现this post。他说这仅适用于P3D模式,但是此CaptureFluid草图使用P2D。我在上面发布的ReceiveFrames草图使用P3D(请参见空白设置下的尺寸),但是我将其更改为P2D,它似乎可以正常工作,因此我不确定这是否是一个问题。

提前致谢!

最佳答案

您的问题有点笼统,但我可以尝试在一般意义上提供帮助。

首先,您可能不想听的东西:如果您不真正了解它的工作原理,那么将很难尝试敲打您在Internet上找到的代码以完成所需的工作。您说您不是真正的编码员,没关系!那里有很多教程(我写过一些无耻的自我促进:here),可以帮助您更好地理解代码。您的目标应该是在尝试使用每个草图之前先对其进行了解。

现在,要“合并”两个程序,您实际要做的是从一个空白草图开始。这似乎很矛盾,但是向空白草图中添加内容要比从现有草图中删除内容要容易得多。

然后是breaking your problem down into smaller steps的问题,一次执行一个步骤。从小做起(比您认为有趣的小),并以非常小的步骤逐步前进。

例如,您说您想使用虹吸提要。在继续之前,请确保该功能完美运行。我认为您实际上已经有执行此操作的代码,但是请确保您确实完全了解它的工作方式:例如,您需要了解canvasclient变量如何协同工作。

然后,您需要一步步地前进。不要尝试复制并粘贴整个光学流程。隔离您可以找到的最简单的功能-一次仅几行代码。使它与虹吸提要一起工作。例如,尝试绘制基于虹吸提要的简单形状。

然后像这样的小步骤继续前进。不断问自己,我知道我接下来要做的最小的事情是什么?去做。在继续进行下一件事情之前,使其完美工作。

如果您被困在某个特定步骤上,则可以发布MCVE以及一个特定的技术问题,我们将从那里开始。祝好运。

关于java - 虹吸入Pixelflow捕获液,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44620709/

10-10 16:26