2017-09-21 11 views
0

사람 추출과 배경 빼기에 대한 프로젝트를 수행하고 있습니다. 나는 전경 사람들의 비디오를 내보낼 것입니다. 다니엘 쉬프 먼 (Daniel 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 단계 : 각 버퍼를 이미지 파일로 하드 드라이브에 저장하십시오. save() 기능을 PImage 또는 PGraphics으로 사용하면됩니다.

3 단계 : 이제 각 프레임을 만들었으므로 함께 결합하십시오. FFMPEG 또는 ImageMagick을 사용하여이 작업을 수행 할 수 있습니다.

당신이 그들을 결합하는 것에 대하여 생각하기 시작하기 전에 그 것들이 완벽하게 작동하도록하십시오. 특정 단계를 고수하면 그 단계의 MCVE을 게시 할 수 있습니다. 행운을 빕니다.

+0

부적절한 질문에 사과드립니다. 나는 여기 꽤 초보자 다. 그리고 당신의 안내에 감사드립니다. 전에 당신의 충고를 고려해 봤지만 전경 픽셀 만 이미지의 전체 픽셀이 아니라고 원합니다. 아마도 요점은 픽셀 [loc] 것 같아요. 이것에 대해 조언 해 주시겠습니까? 고마워. – iiyeo

+0

@iiyeo 내 대답을 편집하십시오. 원본 이미지에서 원하는 픽셀을 대상 버퍼로 복사하려고합니다. 'createGraphics()'함수는 여러분의 친구입니다. –

+0

적시에 답변 해 주셔서 감사합니다. 나는 이런 식으로 시도 할 것이다. – iiyeo