我是一个处理草图的菜鸟,该草图将网络摄像头作为输入并应用光流和粒子效果。该草图称为OpticalFlow_CaptureFluid。它来自 Thomas Diewald 的 PixelFlow 库。
基本上,我想修改 CaptureFluid 草图,使其采用虹吸管源而不是网络摄像头源。
我查看了 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 变量都需要重命名或以某种方式修改。Tbh 我什至不明白他们在做什么。
好的最后一件事:我发现了这个人的这篇文章,他正在使用 Syphon 发送帧进出草图。他说这只适用于 P3D 模式,但这个 CaptureFluid 草图使用 P2D。我在上面发布的 ReceiveFrames 草图使用 P3D(请参阅 void 设置下的大小),但我将其更改为 P2D 并且它似乎工作得很好,所以我不确定这是否真的是一个问题。
提前致谢!