加载视频
import processing.video.*;
Movie m;
void setup()
{
size(800,600);
m =new Movie(this,"time.mov");
m.loop();
}
void draw()
{
background(0);
image(m,0,0,width,height);
}
void movieEvent(Movie m)
{
m.read();
}
将要加载的视频放到工程目录下的data文件中,引入import processing.video.*;库
movieEvent()这个方法会伴随draw()循环运行在后台读取视频。
image(img,a,b)
image(img,a,b,c,d)
img是要显示的图像,a是图像的x坐标,b是图像的y坐标,c是显示图像的宽度,d是显示图像的高度。
读取摄像头
import processing.video.*;
Capture cam;
void setup()
{
size(640,480);
String [] cameras =Capture.list();
for(int i =0;i<cameras.length;i++)
{
println(i+": "+cameras[i]);
}
cam=new Capture(this,cameras[1]);
cam.start();
}
void draw()
{
if(cam.available()==true)
{
cam.read();
}
image(cam,0,0);
}
导入import processing.video.*;库
cam.avaliable()==true它是用于判断摄像头状态的cam.read()是读取摄像头数据用的。
image.(cam,0,0)会把摄像头画面显示出来
调整摄像头影像的尺寸
image(cam,-0,0,800,640);只能调整画布的尺寸并不能改变分辨率。
可以根据在控制台的信息选择合适的分辨率,若是不知道摄像头的信息可以通过println打印出来。
println(cam.width+" "+cam.height)
获取颜色信息
int backgroundCol =color(255,0,0);
void setup()
{
size(400,400);
}
void draw()
{
background(backgroundCol);
float r =red(backgroundCol);
float b =blue(backgroundCol);
float g =green(backgroundCol);
println("red:"+r+",blue:"+b+",green:"+g);
}
读写像素点
import processing.video.*;
Capture cam;
void setup()
{
size(640,480);
String [] cameras =Capture.list();
for(int i =0;i<cameras.length;i++)
{
println(i+": "+cameras[i]);
}
cam = new Capture(this,cameras[1]);
cam.start();
}
void draw()
{
if(cam.available()==true)
{
cam.read();
}
cam.loadPixels();
int totalPixels =cam.width*cam.height;
println(totalPixels);
for(int i =0;i<totalPixels;i+=15)
{
color pixelCol =cam.pixels[i];
stroke(pixelCol);
int x =i % cam.width;
int y= i / cam.width;
point(x,y);
}
//image(cam,0,0,640,480);
}
cam.pixels[]数组包含了摄像头画面的所有像素。通过加载一个个像素点才呈现摄像头画面。
视频输出像素点风格
import processing.video.*;
Capture cam;
void setup()
{
size(640,480);
String [] cameras =Capture.list();
for(int i =0;i<cameras.length;i++)
{
println(i+": "+cameras[i]);
}
cam = new Capture(this,cameras[0]);
cam.start();
}
void draw()
{
if(cam.available()==true)
{
cam.read();
}
cam.loadPixels();
int pixelSize =20;
for( int y=0;y<cam.height;y+=pixelSize)
{
for(int x=0;x<cam.width;x+=pixelSize)
{
int camPixelPos =y*cam.width+x;
color pixCol =cam.pixels[camPixelPos];
fill(pixCol);
rect(x,y,pixelSize,pixelSize);
}
}
}
像素块风格
import processing.video.*;
Capture cam;
void setup()
{
size(1024,768,P3D);
String [] cameras =Capture.list();
for(int i =0;i<cameras.length;i++)
{
println(i+": "+cameras[i]);
}
cam = new Capture(this,cameras[1]);
cam.start();
}
void draw()
{
background(0);
if(cam.available()==true)
{
cam.read();
}
cam.loadPixels();
int pixelSize =20;
float sizeMult=1.5;
for( int y=0;y<cam.height;y+=pixelSize)
{
for(int x=0;x<cam.width;x+=pixelSize)
{
int camPixelPos =y*cam.width+x;
color pixCol =cam.pixels[camPixelPos];
float pixBrightness =255-brightness(pixCol);
fill(pixCol);
pushMatrix();
translate(x*sizeMult,y*sizeMult,pixBrightness);
box(pixBrightness*0.1);
popMatrix();
/* pushMatrix();
translate(x*sizeMult,y*sizeMult,0);
sphere(pixBrightness*0.1);
popMatrix();
*/
}
}
}
视频替代摄像头画面
import processing.video.*;
Movie m;
void setup()
{
size(640,480,P3D);
m =new Movie(this,"boom.mov");
m.loop();
}
void draw()
{
background(0);
m.loadPixels();
int pixelSize =10;
float sizeMult=1.5;
for( int y=0;y<m.height;y+=pixelSize)
{
for(int x=0;x<m.width;x+=pixelSize)
{
int camPixelPos =y*m.width+x;
color pixCol =m.pixels[camPixelPos];
float pixBrightness =255-brightness(pixCol);
fill(pixCol);
pushMatrix();
translate(x*sizeMult,y*sizeMult,pixBrightness);
box(pixBrightness*0.1);
popMatrix();
}
}
}
void movieEvent(Movie m)
{
m.read();
}