我想知道是否有人可以帮助我使用处理将图像设置到前台。 我有一个草图,其中视频以连续循环显示,在此视频上方,有一个alpha蒙版可以看到它是透明的视频。 然后,使用IR接近传感器触发来自网络摄像头的视频。这个视频用圆柱体扭曲,我希望视频在面具下面,因为我会将它放大以适应面具。
我在网上搜索但没有关于它。 我尝试在视频下移动上面的线条,但没有任何作用。当没有扭曲的时候我用之前的版本做了它,我只需移动两条线就可以了。但现在我有这种扭曲,没有任何作用,它让我疯狂......
非常感谢你的帮助。 这是我的代码:
/////////////////////////////////////////////// //////// 编辑 ////////////////////////////////////////////////// /////
再次感谢您的帮助,对此链接感到抱歉,我不知道。 我知道如何使用网络摄像头/图片中的电影/视频作为纹理,这不是我的问题。 我遇到的问题是,我会在面板上方放置一个带有纹理的面具,我不知道该怎么做,我尝试搜索很多东西。我从3天开始处理这个问题...... 所以,在这里我的代码我隔离了问题(MCVE),关于面具,我用photoshop创建它:一个简单的形状,黑色背景和中间的透明形状,导出为PNG格式的网络透明。
int tubeRes = 32;
float[] tubeX = new float[tubeRes];
float[] tubeY = new float[tubeRes];
PImage img;
PImage masque;
void setup() {
size(1280, 1024, P3D);
img = loadImage("berlin-1.jpg");
masque = loadImage("mask.png");
float angle = 210.0 / tubeRes;
for (int i = 0; i < tubeRes; i++) {
tubeX[i] = cos(radians(i * angle));
tubeY[i] = sin(radians(i * angle));
}
noStroke();
}
void draw() {
translate(width / 2, height / 2);
beginShape(QUAD_STRIP);
texture(img);
for (int i = 0; i < tubeRes; i++) {
float x = tubeX[i] * 120;
float z = tubeY[i] * 100;
float u = img.width / tubeRes * i;
vertex(x, -270, z, u, 0);
vertex(x, 230, z, u, img.height);
}
endShape();
beginShape(QUADS);
texture(img);
vertex(0, -100, 0, 0, 0);
vertex(100, -100, 0, 100, 0);
vertex(100, 100, 0, 100, 100);
vertex(0, 100, 0, 0, 100);
endShape();
translate(-640, -515);
}
答案 0 :(得分:0)
你必须从小做起,而且你必须将你的问题分离成一个更简单的草图。现在你已经有很多事情要做:播放视频文件,摄像头捕捉,串行传感器,图像屏蔽和OpenCV逻辑。这对于一次调试来说太过分了。
相反,创建一个更小的示例草图,只做一件事。从简单显示视频播放的草图开始。当你开始工作时,添加使用视频作为纹理的逻辑。
以下是一个示例MCVE,展示了如何将视频用作纹理:
import processing.video.*;
Movie movie;
void setup() {
size(500, 500, P3D);
frameRate(30);
movie = new Movie(this, "DSC_1940.MOV");
movie.loop();
}
void draw() {
background(0);
beginShape();
texture(movie);
vertex(mouseX, mouseY, 0, 0);
vertex(400, 100, movie.width, 0);
vertex(400, 400, movie.width, movie.height);
vertex(100, 400, 0, movie.height);
endShape();
}
void movieEvent(Movie myMovie) {
myMovie.read();
}
请注意,这比您的代码简单得多,并且它一次只做一件事。重新开始这样的事情,并尽可能地尝试硬编码。我们不需要查看您的序列号,如果可能,我们也不需要从您的网络摄像头或OpenCV中查看任何内容。
使用此示例草图并添加逻辑以使用图像蒙版,或使用圆柱而不是方形。 (但是,请不要包含任何与您的问题没有直接关系的逻辑!)然后当您遇到问题时,您可以将其作为MCVE发布到新问题中。祝你好运。
如果您尝试做的只是屏蔽图像,那么您只需使用PImage::mask()
功能即可。可以在the reference中找到更多信息,但它应该像在代码中调用img.mask(masque)
一样简单:
img = loadImage("berlin-1.jpg");
masque = loadImage("mask.png");
img.mask(masque);
然后你应该可以使用img
作为纹理,并且已经应用了蒙版。
但是,您的.png
文件似乎无法作为掩码使用!如果我使用图像屏蔽示例中的mask.jpg
文件(在您的处理中)编辑器,转到File > Examples > Image > Alphamask
,然后转到Sketch > Show Sketch Folder,
,然后在mask.jpg
目录中找到data
,或者如果我将.png
文件保存为{{1}它可以正常工作。
如果我将示例.jpg
文件保存为mask.jpg
文件,则可以正常工作。特别是你的文件有问题。