使用OpenCV录制时网络摄像头的FPS较低?

时间:2016-03-07 03:00:46

标签: java opencv webcam frame-rate latency

我一直致力于使用OpenCV构建Java应用程序,该应用程序从网络摄像头抓取数据并进行记录。但是,我无法实现大于10 FPS(Intel i5-5200u,8 GB RAM)的帧速率,这对我来说似乎不对。我的网络摄像头支持高达30 FPS和1280 x 720分辨率。以640 x 480记录仅增加到大约12 FPS。以720p录制(我需要为我的应用程序做)录制前面提到的10.我的第一个想法是VideoCapture.read()函数需要相对较长的时间来处理,所以我尝试将这些调用移动到线程池,但是它没有任何收获。我已经阅读了这个库应该有多快的所有内容,所以我一定做错了。以下是捕获数据的循环:

    VideoCapture cam = new VideoCapture();
    cam.open(0);

    // set proper resolution
    cam.set(Videoio.CV_CAP_PROP_FRAME_WIDTH, CAMERA_WIDTH);
    cam.set(Videoio.CV_CAP_PROP_FRAME_HEIGHT, CAMERA_HEIGHT);

    // Matrix for storing camera images, provided by OpenCV
    ArrayList<Mat> framesList = new ArrayList<>();

    long startTime = System.currentTimeMillis();

    if( ! cam.isOpened()) {
        System.err.println("Camera could not be opened.");
    }

    else {
        System.out.println("Capturing...");

        while(System.currentTimeMillis() - startTime < 1000 * SECONDS_TO_RUN) {

            Mat frame = new Mat();
            cam.read(frame);
            framesList.add(frame);

        }

        cam.release();

        System.out.println("Done recording. " + framesList.size() + " frames captured.");
        System.out.println("Framerate : " + framesList.size() / SECONDS_TO_RUN);

0 个答案:

没有答案