You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Processing中调整Xbox360 Kinect的输出图像尺寸?

问题解决:Kinect深度图缩放后无法刷新的问题

问题根源

你代码里每次draw()循环都调用result.resize(640*2,480*2),直接改变了result的尺寸,但后续更新像素时,还是用原640×480的depthCam尺寸计算像素索引,导致result变成1280×960后,绝大多数像素根本没被更新,所以看起来只有初始帧。另外窗口可调整但background(0)只清理原640×480区域,也是顶部出现重复刷新流的原因。

修复方案

不用修改result本身的尺寸,而是在绘制时用image()函数的缩放参数直接拉伸显示,既能保证每次像素正确更新,又能实现全屏/放大效果:

修改后的代码:

import SimpleOpenNI.*;

SimpleOpenNI kinect;
 
PImage depthCam;
PImage result;

void setup()
{
  // 可直接设置目标尺寸,也保持窗口可调整
  size(1280, 960);
  surface.setResizable(true);
  background(0);

  kinect  = new SimpleOpenNI(this);
  kinect.enableDepth();
 
  // result固定为Kinect输出的640×480尺寸
  result = createImage(640, 480, RGB);
}
 
void draw()
{
  // 按当前窗口尺寸清屏
  background(0);
  kinect.update();

  depthCam = kinect.depthImage();
  int[] depthVals = kinect.depthMap();

  result.loadPixels();
 
  for (int y=0; y<depthCam.height; y=y+5)
  {
    for (int x =0; x<depthCam.width; x=x+5)
    {
      int loc = x + y * depthCam.width;

      if (depthVals[loc] <= 1200 && depthVals[loc] > 50) { 
        result.pixels[loc] = color(250);
      }
      else if (depthVals[loc] > 1200 && depthVals[loc]< 3000 )
      {
        result.pixels[loc] = color(102);
      }
      else  {
        result.pixels[loc] = color(0);
      }
    }
  }

  result.updatePixels();
  // 将小图直接拉伸到当前窗口尺寸显示
  image(result, 0, 0, width, height);
}

核心说明

  • result固定为Kinect输出的640×480,每次循环都能正确遍历并更新所需像素
  • 绘制时通过image(result, 0, 0, width, height)自动适配窗口大小,不管窗口如何调整都能全屏显示
  • background(0)按当前窗口尺寸清屏,避免旧帧残留

内容的提问来源于stack exchange,提问作者Rose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:45:29