2017-09-21 8 views
0

Je fais un projet sur l'extraction de personnes et la soustraction de fond. Je vais exporter une vidéo des personnes de premier plan. Appris de Daniel Shiffman, maintenant je pouvais obtenir les pixels de premier plan mais je ne sais pas comment exporter ces pixels en vidéo. Ou je n'ai pas besoin de l'exporter immédiatement, mais j'ai besoin de faire un traitement supplémentaire sur ces pixels en tant que format vidéo. Est-ce que quelqu'un pourrait m'aider? Merci beaucoup d'avance. Désolé pour mon anglais s'il y a une erreur.Comment exporter une vidéo de pixels de premier plan dans le traitement

Voici le code:

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(); 
} 

Répondre

0

Stack Overflow est pas vraiment conçu pour général "comment puis-je faire" des questions de type. C'est pour des questions spécifiques "J'ai essayé X, j'ai attendu Y, mais j'ai obtenu Z à la place". Mais je vais essayer d'aider dans un sens général:

Vous devez split your problem up into smaller pieces et ensuite prendre ces pièces un à la fois. Voici comment je pourrais aborder le problème:

Étape 1: Isolez les pixels que vous voulez. Vous dites que vous pouvez obtenir les pixels de premier plan. Dessinez-les maintenant dans un tampon en utilisant la fonction createGraphics().

Étape 2: Stockez chaque tampon en tant que fichier image sur votre disque dur. Vous pouvez le faire en utilisant la fonction save() de PImage ou PGraphics.

Étape 3: Maintenant que vous avez chaque image, assemblez-les ensemble dans une vidéo. Vous pouvez le faire en utilisant FFMPEG ou peut-être ImageMagick. Faites en sorte que ces choses fonctionnent parfaitement d'elles-mêmes avant de commencer à penser à les combiner. Ensuite, si vous êtes bloqué sur une étape spécifique, vous pouvez poster un MCVE juste de cette étape. Bonne chance.

+0

Désolé pour la mauvaise destination. Je suis un débutant ici et merci pour votre guide. J'ai déjà pris en compte votre conseil mais je ne veux que les pixels de premier plan et non les pixels entiers de l'image. Je suppose que peut-être le point clé est pixels [loc]. Pourriez-vous donner quelques conseils à ce sujet? Merci beaucoup. – iiyeo

+0

@iiyeo Voir la modification à ma réponse. Vous voudriez copier les pixels que vous voulez de l'image source dans un tampon cible. La fonction 'createGraphics()' est votre ami ici. –

+0

Appréciez pour votre réponse rapide. Je vais essayer de cette façon. – iiyeo