我将在我的处理项目中显示2层(分别来自kinect和掩码的深度图像)。在这个项目中,我将通过使用掩码来隐藏没有用户可用的区域。请注意,“mask”在我的代码中从名为“movie2”的电影中获取其像素 有没有办法通过减少遮罩边框的不透明度来模糊用户的边框?
这是我的代码:
import SimpleOpenNI.*;
PImage mask,depth;
SimpleOpenNI kinect;
int[] userMap;
void setup(){
kinect = new SimpleOpenNI(this);
size(640,480);
kinect.enableDepth();
kinect.enableUser();
}
void draw(){
kinect.update();
depth=kinect.depthImage();
userMap = kinect.userMap();
image(depth,0,0);
mask=loadImage("mask.jpg");
mask.loadPixels();
for (int y=0; y<480; y++) {
for (int x=0; x<640; x++) {
int index = x + y *640;
if (userMap[index]!= 0) {
mask.pixels[index]=color(0,0,0,0);
}
}
}
mask.updatePixels();
image(mask,0,0);
}
答案 0 :(得分:0)
有一些事情可以改进:
ERODE
或BLUR
来自filter() 其他说明:
以下是将代码作为代码进行说明,但请记住这个不完整/未经测试:
import processing.video.*;
class effect2{
PImage mask;
int[] userMap;
PImage userImage;
int numPixels;
effect2(){
//movie2 = new Movie(this,"MOVIE_2_PATH_HERE");//might be initialised somewhere
movie2.play();
//initialize image once
userImage = createImage(640,480,ARGB);
userImage.loadPixels();
numPixels = userImage.width * userImage.height;
userMap = new int[numPixels];
}
void drawing(){
//kinect.update(); is called at some point
image(depth,0,0);
//update user map
kinect.userMap(userMap);
//update user image based on user map
//flat (1D) for loop is faster than nested (2D) for loop
for(int i = 0; i < numPixels; i++){
if (userMap[i] == 0) {
userImage.pixels[i] = 0x00000000;//transparent black
}else{
userImage.pixels[i] = 0xFFFFFFFF;//opaque white
}
}
userImage.updatePixels();
//filter/blur as needed
//I recommend using https://github.com/atduskgreg/opencv-processing for faster blur (and other filters)
userImage.filter(BLUR,2);
//apply mask
movie2.mask(userImage,0,0);
//preview mask
image(userImage,0,0,64,48);
}
}
//the movie is updated too
void movieEvent(Movie m){
m.read();
}