Opencv 处理:如何将图像设置为前景
我想知道是否有人可以帮助我设置一个图像的前景使用处理。 我有一个草图,其中一个视频显示在一个连续的循环中,在这个视频的上方,有一个阿尔法遮罩,可以看到透明的视频。 然后,通过红外接近传感器触发网络摄像头的视频。这个视频是扭曲了一个圆柱体,我想视频下的面具,因为我会放大它,以适应面具 我在网上搜索,但什么都没有。 我试图移动视频上方和下方的线条,但没有任何效果。我在没有翘曲的情况下使用上一个版本,只需移动两条线,它就可以工作了。但现在我有了这种扭曲,没有任何效果,它让我发疯 非常感谢你的帮助。 这是我的代码: /////////////////////////////////////////////////////// 编辑 /////////////////////////////////////////////////////// 再次感谢您的帮助,很抱歉链接,我不知道。 我知道如何使用网络摄像头/图片中的电影/视频作为纹理,这不是我的问题。 我遇到的问题是,我会把一个面具放在形状上面,上面有纹理,我不知道怎么做,我试着搜索很多东西。我从3天开始就在处理这个问题。。。 所以,在我的代码中,我隔离了问题(MVE),关于掩码,我用PS图象处理软件创建它:一个简单的形状,黑色背景和中间的透明形状,以透明的格式输出给PNG格式的Web。Opencv 处理:如何将图像设置为前景,opencv,video,position,processing,foreground,Opencv,Video,Position,Processing,Foreground,我想知道是否有人可以帮助我设置一个图像的前景使用处理。 我有一个草图,其中一个视频显示在一个连续的循环中,在这个视频的上方,有一个阿尔法遮罩,可以看到透明的视频。 然后,通过红外接近传感器触发网络摄像头的视频。这个视频是扭曲了一个圆柱体,我想视频下的面具,因为我会放大它,以适应面具 我在网上搜索,但什么都没有。 我试图移动视频上方和下方的线条,但没有任何效果。我在没有翘曲的情况下使用上一个版本,只需移动两条线,它就可以工作了。但现在我有了这种扭曲,没有任何效果,它让我发疯 非常感谢你的帮助。 这
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);
}
int tubeRes=32;
浮动[]管x=新浮动[管];
浮动[]管Y=新浮动[管];
皮马杰;
皮美杰面具;
无效设置(){
大小(1280、1024、P3D);
img=loadImage(“berlin-1.jpg”);
masque=loadImage(“mask.png”);
浮子角度=210.0/管;
对于(int i=0;i
你必须从更小的角度开始,并且你必须将你的问题隔离到一个更简单的草图中。现在你有很多事情要做:播放视频文件、摄像机捕获、串行传感器、图像屏蔽和OpenCV逻辑。这一次调试太多了 相反,创建一个小得多的示例草图,它只做一件事。从一个简单显示视频播放的草图开始。当你得到工作,然后添加逻辑,使用视频作为纹理 下面的示例演示了如何将视频用作纹理:
导入处理。视频。*;
电影;
无效设置(){
尺寸(500,500,P3D);
帧率(30);
电影=新电影(此为“DSC_1940.MOV”);
movie.loop();
}
void draw(){
背景(0);
beginShape();
纹理(电影);
顶点(mouseX,mouseY,0,0);
顶点(400,100,电影宽度,0);
顶点(400,400,movie.width,movie.height);
顶点(100400,0,电影高度);
endShape();
}
作废电影事件(电影我的电影){
myMovie.read();
}
请注意,这比您的代码简单得多,一次只做一件事。从这样的事情开始,尽可能多地硬编码。我们不需要查看您的串行代码,如果可能,我们也不需要从您的网络摄像头或OpenCV中查看任何内容
以本例为例,绘制并添加逻辑以使用图像遮罩,或使用圆柱体而不是正方形。(但同样,不要包含任何与你的问题没有直接关系的逻辑!)然后当你陷入困境时,你可以在新问题中将其作为MCVE发布。祝你好运
编辑
如果您只想屏蔽一个图像,那么您只需使用PImage::mask()
函数即可。可以在中找到更多信息,但应该很简单,只需在代码中调用img.mask(masque)
:
img=loadImage(“berlin-1.jpg”);
masque=loadImage(“mask.png”);
面具(面具);
然后您应该能够使用img
作为纹理,并且已经应用了遮罩
但是,您的.png
文件似乎不能用作掩码如果我使用图像掩蔽示例中的mask.jpg
文件(在处理编辑器中,转到file>Examples>image>Alphamask
,然后转到Sketch>Show Sketch文件夹,
然后在data
目录中查找mask.jpg
)或者,如果我将您的.png
文件保存为.jpg
文件,它可以正常工作
如果我将示例
mask.jpg
文件保存为.png
文件,它就可以正常工作。所以你的文件特别有问题。我不知道你在问什么。如果你发一个帖子,你会有更好的运气。创建一个小的示例程序,只显示问题,没有任何额外的代码。尽可能多地硬编码。我们可能不需要序列的东西,甚至可能不需要opencv的东西。使用硬编码的值(和电影文件,而不是摄影机提要)来显示问题,我们将更容易帮助您。嗨,凯文,谢谢您的回复。对不起,这是MCVE。在圆柱体上的扭曲图像下方是遮罩。我希望这个面具在圆柱体上的图像上方。我希望它能帮助你。再次感谢您的回复:)嗨,凯文,再次感谢您的回复和帮助。我给了你下载草图的链接(带有数据文件夹),在那里我用照片而不是视频来隔离问题