2017-09-21 98 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