我是一个菜鸟,工作在处理草图,以一个网络摄像头的饲料作为输入,并应用光流和粒子效应。这个素描叫CaptureFluid。这是托马斯·迪沃尔德的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);我知道我需要在CaptureFluid草图中添加“Importcodeanticode.syphon.*”,去掉摄像头捕获位,然后用一个新的信标客户端替换它。我想所有的pg_cam_a和pg_cam_b变量都需要重命名或修改。我甚至不太明白他们在做什么。
好的最后一件事:我发现这个职位是由一个家伙谁发送帧进出素描与虹吸。他说这只在P3D模式下有效,但是这个CaptureFluid草图使用P2D。我在上面发布的ReceiveFrames草图使用了P3D (请参见在空设置下的大小),但我将其更改为P2D,它似乎工作得很好,所以我不确定这是否真的是一个问题。
提前感谢!
发布于 2017-06-19 17:12:42
你的问题有点宽泛,但我可以试着在一般意义上提供帮助。
首先,你可能不想听到的东西:如果你不真正理解它的工作原理,你将很难尝试将你在互联网上找到的代码投入到你想做的事情中去。你说你不是真正的程序员,这没什么!有大量的教程(无耻的自我推销:这里是我写的)可以帮助您更好地理解代码。你的目标应该是理解每一个人的草图,然后尝试使用它们。
现在,要“组合”两个程序,您实际上想要做的是从空白草图开始。可能有点矛盾,但在空白草图中添加内容要比从现有草图中删除东西要容易得多。
然后,这是一个将问题分解成更小的步骤的问题,并采取这些步骤,一次一个。启动小(比您认为有趣的要小),并以非常小的步骤继续前进。
例如,您说要使用Syphon提要。在你继续前进之前把它做得很好。我认为您实际上已经有了这样做的代码,但是要确保您确实理解它是如何工作的:例如,您需要了解canvas和client变量是如何协同工作的。
然后你需要用一小步前进。不要试图复制和粘贴整个光流程序。隔离您可以找到的最简单的功能--一次只需要几行代码。把它和你的虹吸饲料一起用。例如,尝试根据虹吸提要绘制一个简单的形状。
然后继续沿着这样的小步子前进。继续问自己,接下来我需要做的最小的事情是什么?就这么做吧。在做下一件事之前,让它完美地工作。
如果您停留在特定的步骤上,那么您可以发布一个MCVE和一个特定的技术问题,我们将从那里开始。祝好运。
https://stackoverflow.com/questions/44620709
复制相似问题