在处理中从网络摄像头存储在可变帧中
Storing in a variable frame from webcam in Processing
我尝试了很多时间将来自网络摄像头的帧存储在变量中,但它不起作用。目标是比较视频中的两个连续帧,所以我需要将两个帧存储在两个变量中,但是存储一个已经比我想象的要难了。这是对应于此问题的代码:
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);
}
写 image(video, 0, 0) 时效果很好;但是一旦我尝试用变量 image1 替换它,它就不会打印任何内容。因此,问题是第三行...
有人知道发生了什么事吗?
提前致谢!
如果您的 if
语句计算结果为真,则您仅将 image1
设置为一个值:
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
变量。
我尝试了很多时间将来自网络摄像头的帧存储在变量中,但它不起作用。目标是比较视频中的两个连续帧,所以我需要将两个帧存储在两个变量中,但是存储一个已经比我想象的要难了。这是对应于此问题的代码:
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);
}
写 image(video, 0, 0) 时效果很好;但是一旦我尝试用变量 image1 替换它,它就不会打印任何内容。因此,问题是第三行...
有人知道发生了什么事吗?
提前致谢!
如果您的 if
语句计算结果为真,则您仅将 image1
设置为一个值:
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
变量。