0

プロジェクトでaviを処理するためにjavacvを使用しました。ビデオは通常よりも速く表示されます。ビデオの速度を設定するために fps を取得したいと考えています。しかし、grabber.getFrameRate() は 0 を返します。これは、grabber.getLengthInFrames() およびgrabber.getSampleRate() と同じです。だれかが理由を教えてもらえますか? 以下のコード スニペット:

FrameGrabber grabber = new OpenCVFrameGrabber("sample.avi");
double fps=grabber.getFrameRate();
System.out.println(fps);
//int n=grabber.getLengthInFrames();
//int f=grabber.getSampleRate();
CvMemStorage storage = CvMemStorage.create();
grabber.start();
grabbedImage = grabber.grab();
while (frame.isVisible() && (grabbedImage = grabber.grab()) != null)
{
        BufferedImage bfimg = grabbedImage.getBufferedImage();        
        frame.showImage(bfimg);
        frame.waitKey((int)(1000/fps));            
        cvClearMemStorage(storage);
}
grabber.stop();
4

3 に答える 3

0

私はウェブカメラの例でこれを試しましたが、うまくいきました:

double time1,time2;

// your  loop

 while(....){

     time1=System.currentTimeMillis();   // add this first in the loop 

         //code here
          .
          .
          .
          .

     time2=System.currentTimeMillis();   //   add this at the end of the loop

System.out.println("framerate = " + 1/(((time2-time)/1000)%60))

} //end of loop

ウェブカメラのコードが見つかったウェブカメラの例の場合: http://opencvlover.blogspot.com/2012/05/accessing-webcam-using-javacv.html

次のようになります。

IplImage img
while (...) {

     time1=System.currentTimeMillis();   // add this first in the loop 

   //inser grabed video fram to IplImage img
   img = grabber.grab();

          .
          .
          .
          .
     //Show video frame in canvas
     canvas.showImage(img);

 time2=System.currentTimeMillis();   //   add this at the end of the loop

System.out.println("framerate = " + 1/(((time2-time)/1000)%60))
} //end of loop
          .
          .              
          .
于 2014-12-19T07:00:36.933 に答える
0

start(); の後に呼び出す必要があります。

たぶんあなたはできる

FrameGrabber grabber = new OpenCVFrameGrabber("sample.avi");
grabber.start();
double fps=grabber.getFrameRate();
于 2013-09-09T07:06:16.293 に答える
0

このコードを使用して、mp4 ビデオを記録します。

public static void main(String[] args) {
    IplImage image;
    CanvasFrame canvas = new CanvasFrame("Web Cam");
    try {
        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        grabber.start();
        IplImage grabbedImage = grabber.grab();

        canvas.setCanvasSize(grabbedImage.width(), grabbedImage.height());

        System.out.println("framerate = " + grabber.getFrameRate());
        grabber.setFrameRate(grabber.getFrameRate());
        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("c:/demo.mp4", 320, 240);

        recorder.setVideoCodec(13);
        recorder.setFormat("mp4");
        recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
        recorder.setFrameRate(10);
        recorder.setVideoBitrate(5*1024);  


        recorder.start();
        System.out.println("framerate = " + grabber.getFrameRate());

        while (canvas.isVisible() && (grabbedImage = grabber.grab()) != null) {
            canvas.showImage(grabbedImage);
            recorder.record(grabbedImage);
        }


        recorder.stop();
        grabber.stop();
        canvas.dispose();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
于 2013-09-16T05:11:50.123 に答える