我已经尝试了很多时间来存储一个来自网络摄像头的可变帧,但它不起作用。目标是比较视频中的两个连续帧,所以我需要在两个变量中存储两个帧,但是存储一个已经比我想象的更难了。这是与此问题相对应的代码:
import processing.video.*;
Capture video;
PImage image1;
void setup() {
size(1280, 960);
println("Caméras disponibles : ");
printArray(Capture.list());
video = new Capture(this, Capture.list()[75]);
video.start();
}
void draw() {
if (video.available() == true) {
video.read();
image1 = video;
}
image(image1, 0, 0);
}
我写图像时工作正常(视频,0,0);但是一旦我尝试用变量image1替换它,它就不会打印任何东西。因此,问题是第三行......
有人会知道发生了什么吗?
提前致谢!
如果image1
语句的计算结果为true,则只将if
设置为一个值:
if (video.available() == true) {
video.read();
image1 = video;
}
image(image1, 0, 0);
那么如果video.isAvailable()
是false
会发生什么?您不会将image1
设置为等于任何值,因此它保留其原始值。由于它的原始值未设置,因此它是null
值。将null
传递到image()
函数显然没有任何吸引力。
要解决您的问题,您需要重构代码,只有在有值时才绘制image1
。它可以像这样简单:
if (video.available() == true) {
video.read();
image1 = video;
image(image1, 0, 0);
}
这只是一个猜测,您所做的取决于您希望代码的行为方式。
但有一点需要注意的是,Capture
是PImage
的一个特例,所以我不确定你想要做的事情会起作用。 Capture
实例修改其内部状态,以便随着时间的推移绘制相同的Capture
将绘制不同的帧。因此,如果您设置两个PImage
变量等于相同的Capture
,那么这两个变量将继续与视频一起更新。他们将始终存储最新的帧。
要解决这个问题,您可能希望将当前像素从Capture
复制到每个PImage
变量。