1

OpenCV 2.4.3 を使用して .avi ビデオを書き込もうとしています。私がやろうとしていることは次のとおりです。

  • .avi ビデオを読み込む
  • 各フレームでいくつかのことを行い、最終的にそれらのいくつかを破棄します
  • 新しいビデオを保存する

基本的に、私がしていることは次のとおりです。

  • 顔検出器を使用して顔を見つける
  • 顔が検出されない場合は、そのフレームをスキップします
  • 顔がある場合は、それぞれに長方形を描き、その上にテキストを置きます

Mat altコードは次のようになります (フレームに触れない主要な詳細部分をスキップします)。

VideoCapture cam("1.avi");
VideoWriter writer("1_det.avi", 
           cam.get(CV_CAP_PROP_FOURCC),
           cam.get(CV_CAP_PROP_FPS),
           cv::Size(cam.get(CV_CAP_PROP_FRAME_WIDTH),
           cam.get(CV_CAP_PROP_FRAME_HEIGHT)));

while(cam.read(image2.img)) {
    Mat alt = image2.img.clone();
    // finds faces, then:
    if(faces.size()==0) {
        for(int k=0;k<5;k++) cam.read(alt);
        continue;       
    }
    for(int f=0;f<faces.size();++f) {
        // do some stuff here, then draw some results:
        putText(alt, ss.str(), Point(faces[f].x,faces[f].y), FONT_HERSHEY_SCRIPT_SIMPLEX, 1, Scalar::all(255), 1);

        rectangle(alt, Point(faces[f].x,faces[f].y), Point(faces[f].x+faces[f].width,faces[f].y+faces[f].height), colors[f] , 3, 8, 0 );
    }

    writer << alt;

}

さて、かなりの数のフレームを破棄するので、より低い FPS でビデオを保存したいと思いcam.get(CV_CAP_PROP_FPS)/2ますが、そのようなことをしようとすると、最初のフレームが最初のフレームを何度も繰り返し表示されます。ビデオの(これは正しいです)。

ビデオについて見逃している大きなものはありますか..?

どんな入力でも大歓迎です。ありがとう

4

0 に答える 0