2017-10-31 15 views
0

OpenCV LibでProcessingを使用していて、サンプルコードを作成者Gitから書き直したいので、カメラキャプチャでFace Detectionを実行する代わりに、ビデオ(.mp4 )。 (働いている)のGitと例コードにOpenCV +処理 - ムービーのFaceDetection

リンク: Link

ここでは私のスケッチです:

import processing.video.*; 
import gab.opencv.*; 
import java.awt.Rectangle; 

OpenCV opencv; 
Movie myMovie; 
Rectangle[] faces; 

void setup() { 
    size(480, 270); 

    myMovie = new Movie(this, "people3.mp4"); 
    myMovie.loop(); 
    opencv = new OpenCV(this, myMovie.width, myMovie.height); 
    opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE); 
} 

void movieEvent(Movie myMovie) { 
    myMovie.read(); 
} 

void draw() { 

    background(0); 
    if (myMovie.available()) {  

    opencv.loadImage(myMovie); 
    faces = opencv.detect(); 
    image(myMovie, 0, 0); 

    if (faces != null) { 
     for (int i = 0; i < faces.length; i++) { 
     strokeWeight(2); 
     stroke(255, 0, 0); 
     noFill(); 
     rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height); 
     } 
    } 
    } 
} 

私は取得しています何

はIndexOutOfBoundsExceptionです:インデックス:3、サイズ:0

openCV.loadImage(myMovie)の

と私は理由を知らない。

ありがとうございました!

+0

私があなただったら、 (http://happycoding.io/tutorials/how-to/program)、それらのステップを1つずつ実行してください。たとえば、映画の再生を示す基本的なスケッチを取得できますか? –

+0

あなたはこれをお読みですか? https://forum.processing.org/two/discussion/18536/opencv-problem-with-bootcamp – Harry

+0

@ハリーはそこに行ってきました:)しかし、それはまだ動作していません。公式のopenCVリファレンスをチェックすると、loadImage()関数でMovie引数を使用することが可能であることを暗示するコードを見つけることもできます。 – Jawah

答えて

0

理由を聞いてはいけませんが、Movie.loop()とMovie.play()の両方の関数を呼び出す必要があります。

import processing.video.*; 
import gab.opencv.*; 
import java.awt.Rectangle; 

OpenCV opencv; 
Movie myMovie; 
Rectangle[] faces; 

void setup() { 
    size(480, 270); 

    myMovie = new Movie(this, "people3.mp4"); 
    opencv = new OpenCV(this, 480, 270); 

    opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE); 
    myMovie.loop(); 
    myMovie.play(); 
} 

void draw() { 
    //Movie needs time to load into canvas, so we wait until we get a height 
    while (myMovie.height == 0) delay(10); 
    image(myMovie, 0, 0); 
    opencv.loadImage(myMovie); 
    faces = opencv.detect(); 


    if (faces != null) { 
    for (int i = 0; i < faces.length; i++) { 
     strokeWeight(2); 
     stroke(255, 0, 0); 
     noFill(); 
     rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height); 
    } 
    } 
} 


void movieEvent(Movie myMovie) { 
    myMovie.read(); 
} 
関連する問題