根据网络摄像头输入创建渐变

发布于 2025-01-10 14:18:32 字数 84 浏览 0 评论 0 原文

简单的问题,复杂的答案可能...... 我想根据(实时)网络摄像头输入创建渐变,最好进行处理。我仍然是个菜鸟,所以我希望有人能指出我正确的方向。提前致谢!

Simple question, complicated answer probably...
I want to create gradients based on (live) webcam input, with processing preferably. I'm quite the noob still so I would like someone to point me in the right direction. Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼泪淡了忧伤 2025-01-17 14:18:32

目前尚不清楚是线性、径向还是其他类型的渐变,以及网络摄像头的像素如何映射到渐变。

一种想法可能是使用像素的亮度并使用它来控制径向渐变椭圆的大小,例如,类似于 p5 视频像素示例。 (这个例子是 p5.js 不是Processing java,但是有很多相似之处可以移植/使用Processing 中的逻辑)。

处理已经有线性渐变径向渐变。如果实时运行,则值得缓存梯度。这是一个较旧的渐变缓存答案,我在其中介绍了这一点。

要点归结为:

PImage getRadialGradientImage(int w,int h,int hue,int satMax,int brightness){
  PGraphics gradient = createGraphics(w+1,h+1);//create a PGraphics object
  gradient.beginDraw();//init drawing using the same Processing drawing functions
    gradient.colorMode(HSB,360,100,100);
    gradient.background(0,0);//transparent bg
    gradient.noStroke();
    int cx = gradient.width/2;
    int cy = gradient.height/2;
    for (int r = w; r > 0; --r) {
      gradient.fill(hue,map(r,0,w,satMax,0),brightness);
      gradient.ellipse(cx, cy, r, r);
    }
  gradient.endDraw();
  return gradient;
}

// example usage
PImage myGradient = getRadialGradientImage(100, 100, 0, 100, 100);
image(myGradient, 0, 0);

这可以用来替换视频像素抖动中的 ellipse() 调用,如示例所示。 (请随意更改函数参数以适合您的愿景)。

此外,如果线性/径向渐变还不够,您可以考虑着色器。 p5.j​​s Webcam Shader 示例 是一个很好的开始,着色器处理中也支持PShader。这可能是一个更高级的主题(在这种情况下 处理PShader教程会有很大帮助)。

It's unclear if linear, radial or other type of gradies and how pixels from the webcam are mapped to gradients.

One idea could be to use the brigthness of a pixel and use that to control the size of a radial gradient ellipse for example, similar to p5 Video Pixels example. (The example is p5.js not Processing java, however there are plenty of similarities to be able to port/use the logic in Processing).

Processing already has examples for Linear Gradient and Radial Gradient. If running in realtime it's worth caching the gradients. Here's an older gradient caching answer where I covered this.

The gist boils down to:

PImage getRadialGradientImage(int w,int h,int hue,int satMax,int brightness){
  PGraphics gradient = createGraphics(w+1,h+1);//create a PGraphics object
  gradient.beginDraw();//init drawing using the same Processing drawing functions
    gradient.colorMode(HSB,360,100,100);
    gradient.background(0,0);//transparent bg
    gradient.noStroke();
    int cx = gradient.width/2;
    int cy = gradient.height/2;
    for (int r = w; r > 0; --r) {
      gradient.fill(hue,map(r,0,w,satMax,0),brightness);
      gradient.ellipse(cx, cy, r, r);
    }
  gradient.endDraw();
  return gradient;
}

// example usage
PImage myGradient = getRadialGradientImage(100, 100, 0, 100, 100);
image(myGradient, 0, 0);

This could be used to replace the ellipse() calls in the Video Pixels dithering like example. (Feel free to change the function arguments to be suit your vision).

Additionally, if Linear/Radial gradients aren't enough you could look into shaders. The p5.js Webcam Shader example is a great start and shaders are supported in Processing as well PShader. This may be a more advanced topic (in which case the Processing PShader tutorial will help a lot).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文