在处理中从网络摄像头存储在可变帧中

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);
  }

这只是一个猜测,具体操作取决于您希望代码如何运行。

但需要注意的一件事是 CapturePImage 的一个特殊实例,因此我不确定您尝试执行的操作是否有效。 Capture 个实例修改它们的内部状态,以便随着时间的推移绘制相同的 Capture 将绘制不同的帧。因此,如果您将两个 PImage 变量设置为等于相同的 Capture,这两个变量将随着视频继续更新。他们将始终存储最新的帧。

要解决这个问题,您可能需要将当前像素从 Capture 复制到每个 PImage 变量。