我试图从网络摄像头抓住两个连续的帧,我尝试按照以下方式进行操作。
import processing.video.*;
Capture video;
PImage image1, image2; //Images à comparer
int videoVar = 1;
void setup() {
size(800, 600);
video = new Capture(this, Capture.list()[61]);
video.start();
}
void draw() {
image1 = video.get();
int m = videoVar;
while (m == videoVar) {
//println(m);
}
image2 = video.get();
//image(image1, 0, 0);
//image(image2, width/2, 0);
}
void captureEvent(Capture video) {
video.read();
videoVar = videoVar*(-1);
}
问题在于,while循环本来应该充当自定义延迟,从不会自行退出。它只会在while循环中出现一些内容,作为" print(' m');"例如。问题是,打印需要时间,我希望我的程序尽可能快。
有人会对发生的事情提出建议吗?
答案 0 :(得分:0)
你所说的并没有多大意义。我希望while
循环不断循环,不管它里面是什么。
你根本不应该使用循环作为延迟。您可以使用delay()
函数。
但更好的是,您应该使用millis()
函数或frameCount
变量来检查是否已经过了一定的时间。或者,您只需设置从boolean
函数设置的captureEvent()
值。
如果您仍然无法弄明白,请详细说明您在此尝试做的事情。
修改:为了好玩,您可以尝试在volatile
声明前添加关键字videoVar
吗?该行如下所示:volatile int videoVar = 1;
然后尝试while
循环,不包含任何内容。
但除此之外,我建议您将代码更改为:
boolean doThing = false;
void setup() {
size(800, 600);
}
void draw() {
if(doThing){
// do the thing
doThing = false;
}
}
void captureEvent(Capture video) {
doThing = true;
}
这仅仅是一个例子,但希望它能够证明这种方法。或者,您可以使用noLoop()
和loop()
函数:
void setup() {
size(800, 600);
}
void draw() {
// do the thing
noLoop();
}
void captureEvent(Capture video) {
loop();
}