虹吸到 Pixelflow 捕获液中

Posted

技术标签:

【中文标题】虹吸到 Pixelflow 捕获液中【英文标题】:Syphon into Pixelflow Capture Fluid 【发布时间】:2017-06-19 00:16:06 【问题描述】:

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

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

我查看了 Syphon 的光流草图和接收帧草图。我有点理解每个草图的不同部分在做什么,但是因为我不是一个编码员,所以我对如何组合它们以使光流草图接收来自 syphon 的帧知之甚少。

这是 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,这个人正在使用 Syphon 发送帧进出草图。他说这只适用于 P3D 模式,但这个 CaptureFluid 草图使用 P2D。我在上面发布的 ReceiveFrames 草图使用了 P3D(请参阅 void 设置下的大小),但我将其更改为 P2D 并且它似乎工作得很好,所以我不确定这是否真的是一个问题。

提前致谢!

【问题讨论】:

【参考方案1】:

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

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

现在,要“组合”两个程序,您真正想做的是从空白草图重新开始。这可能看起来自相矛盾,但在空白草图中添加东西要比在空白草图中添加东西容易得多它是从现有草图中取出东西。

那就是breaking your problem down into smaller steps 的问题,一次一个地执行这些步骤。 从小处着手(比您认为有趣的小)并以非常小的步骤向前迈进。

例如,您说要使用虹吸馈送。在你继续之前让它完美地工作。我认为您实际上已经有执行此操作的代码,但请确保您真正了解它的工作原理:例如,您需要了解 canvasclient 变量如何协同工作。

然后你需要一步一步地向前迈进。不要试图复制粘贴整个光流程序。隔离你能找到的最简单的功能——一次只需几行代码。让它与您的虹吸饲料一起使用。例如,尝试根据虹吸馈电绘制一个简单的形状。

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

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

【讨论】:

以上是关于虹吸到 Pixelflow 捕获液中的主要内容,如果未能解决你的问题,请参考以下文章

PyDev unittesting:如何在“捕获的输出”中捕获记录到 logging.Logger 的文本

Chapter 21_4 捕获

java捕获到异常后,异常后的语句不会被执行

OpenCV,从相机捕获并保存到文件

捕获到缓冲 QT

为啥我的 Java 程序在捕获到异常后退出?