2017-09-21 97 views
0

我正在做一个关于人物提取和背景扣除的项目。我将输出前景人物的视频。从丹尼尔Shiffman学习,现在我可以得到前景的像素,但我不知道如何将这些像​​素导出为视频。或者我不需要立即导出它,但我需要对这些像素做进一步的处理,作为视频格式。有没有人可以帮助我?提前致谢。对不起,如果有任何错误,我的英文。如何导出处理中的前景像素的视频

下面是代码:

import processing.video.*; 

Capture video; 

PImage backgroundImage; 
float threshold = 30; 

void setup() { 
    size(320, 240); 
    video = new Capture(this, width, height); 
    video.start(); 

    backgroundImage = createImage(video.width, video.height, RGB); 
} 

void captureEvent(Capture video) { 
    video.read(); 
} 

void draw() { 
    loadPixels(); 
    video.loadPixels(); 
    backgroundImage.loadPixels(); 

    image(video, 0, 0); 
    for (int x = 0; x < video.width; x++) { 
    for (int y = 0; y < video.height; y++) { 
     int loc = x + y * video.width; 



color fgColor = video.pixels[loc]; 
color bgColor = backgroundImage.pixels[loc]; 

float r1 = red(fgColor); float g1 = green(fgColor); float b1 = blue(fgColor); 
float r2 = red(bgColor); float g2 = green(bgColor); float b2 = blue(bgColor); 
float diff = dist(r1, g1, b1, r2, g2, b2); 

if (diff > threshold) { 
    pixels[loc] = fgColor; 
} else { 
    pixels[loc] = color(0, 0, 0); 
} 
    }} 
    updatePixels(); 
} 


void mousePressed() { 
    backgroundImage.copy(video, 0, 0, video.width, video.height, 0, 0, video.width, video.height); 
    backgroundImage.updatePixels(); 
} 

回答

0

堆栈溢出是不是真的适用于一般的“我怎么做”式的问题。这是针对具体的“我试过X,预计Y,但得到Z”类型的问题。但我会尽力在一般意义上提供帮助:

您需要split your problem up into smaller pieces,然后逐个处理这些作品。以下是我可能会遇到的问题:

第1步:隔离所需的像素。你说你可以得到前景像素。现在使用createGraphics()函数将它们绘制到缓冲区。

第2步:将每个缓冲区存储为硬盘驱动器上的映像文件。您可以使用PImagePGraphicssave()函数执行此操作。

第3步:现在你已经有了每一帧,将它们拼接成一个视频。你可以用FFMPEG或ImageMagick来做到这一点。

在开始考虑将它们结合之前,让它们自己完美地工作。然后,如果您遇到特定的步骤,您可以发布一个MCVE这一步。祝你好运。

+0

不适当的问题。我在这里是一个新手,感谢您的指导。我已经考虑过你的建议,但我只想要前景像素而不是图像的整个像素。我想也许关键点是像素[loc]。你能提供一些建议吗?非常感谢。 – iiyeo

+0

@iiyeo请参阅编辑我的答案。您想要将您想要的像素从源图像复制到目标缓冲区。 'createGraphics()'函数在这里是你的朋友。 –

+0

感谢您的及时答复。我会以这种方式尝试。 – iiyeo