在Processing中存储来自网络摄像头的可变帧

问题描述 投票:1回答:1

我已经尝试了很多时间来存储一个来自网络摄像头的可变帧,但它不起作用。目标是比较视频中的两个连续帧,所以我需要在两个变量中存储两个帧,但是存储一个已经比我想象的更难了。这是与此问题相对应的代码:

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替换它,它就不会打印任何东西。因此,问题是第三行......

有人会知道发生了什么吗?

提前致谢!

processing webcam
1个回答
0
投票

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

这只是一个猜测,您所做的取决于您希望代码的行为方式。

但有一点需要注意的是,CapturePImage的一个特例,所以我不确定你想要做的事情会起作用。 Capture实例修改其内部状态,以便随着时间的推移绘制相同的Capture将绘制不同的帧。因此,如果您设置两个PImage变量等于相同的Capture,那么这两个变量将继续与视频一起更新。他们将始终存储最新的帧。

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

© www.soinside.com 2019 - 2024. All rights reserved.