处理中带有Alpha通道的视频

时间:2015-05-18 14:44:40

标签: processing alpha

我想知道是否有人能够做到惊人并帮助我完成我在Processing工作的事情。我需要在实时Feed上播放带有透明度的视频文件,以便视频不仅仅是一个矩形。以下是我认为需要添加或更改内容的代码部分。我对这一切都非常陌生,我非常感谢任何可以提供帮助的人。

2 个答案:

答案 0 :(得分:1)

如果您的视频有Alpha通道,那就太好了, 否则,您应该能够blend()其他内容。

这是概念草图的基本证明。它在实时源顶部覆盖了一个圆网格。使用空格键循环混合模式。根据您的内容和您想要实现的目标,有些人会比其他人工作得更好:

import processing.video.*;

Capture cam;
int w = 320;
int h = 240;
int np = w*h;

PImage overlay;

int blendMode = 1;
int[] blendModes = {BLEND,ADD,SUBTRACT,DARKEST,LIGHTEST,DIFFERENCE,EXCLUSION,MULTIPLY,SCREEN,OVERLAY,HARD_LIGHT,SOFT_LIGHT,DODGE,BURN};
String[] blendModesNames = {"BLEND","ADD","SUBTRACT","DARKEST","LIGHTEST","DIFFERENCE","EXCLUSION","MULTIPLY","SCREEN","OVERLAY","HARD_LIGHT","SOFT_LIGHT","DODGE","BURN"};

void setup(){
  size(w,h);
  cam = new Capture(this,w,h);
  cam.start();

  //test content to overlay, a grid of circles
  background(0);fill(255);
  for(int y = 0 ; y < height; y += 30)
    for(int x = 0 ; x < width; x+= 30)
      ellipse(x,y,15,15);
  overlay = get();
}
void draw(){
  image(cam,0,0);
  blend(overlay,0,0,width,height,0,0,width,height,blendModes[blendMode]);
}
void keyReleased(){
  if(key == ' ') {
    blendMode = (blendMode+1)%blendModes.length;
    println("blendMode: " + blendModesNames[blendMode]);
  }
}
void captureEvent(Capture c){
  c.read();
}

答案 1 :(得分:1)

我通过使用2个视频解决了(也许可以改进):第一个镜头是背景上带有白色的彩色地图;第二个镜头是哑光面具:白色用于&#34;重要&#34;部分,黑色其他。然后应用mask()函数,herunder是代码的重要部分:

Movie mov1;
Movie mov2;
void setup() { 
....code...
 mov1 = new Movie(this, "matte.mov");
 mov2 = new Movie(this, "alpha.mov");
 mov1.play();   
 mov1.pause();   
 mov2.play();   
 mov2.pause();
 }
 void draw() {
 ...code...
 mov1.play();
 mov2.play();
 loadPixels();   
 mov2.mask(mov1);
 image(mov2, 0, 0);
 }

Alpha footage

Matte footage

Result

用于测试的视频是256x256,我总是使用两个数字的幂来获得更好的性能(浮动数学)。希望这有助于某人!