13

VideoWriterビデオを出力するために に渡すことができるように、カメラから fps を取得しようとしています。VideoCapture::get(CV_CAP_PROP_FPS)ただし、カメラから呼び出して 0 fps を取得しています。ハードコーディングすると、ビデオが遅すぎたり速すぎたりする可能性があります。

#include "opencv2/opencv.hpp"
#include <stdio.h>
#include <stdlib.h>

using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{
    cv::VideoCapture cap;
    int key = 0;

    if(argc > 1){
        cap.open(string(argv[1]));
    }
    else
    {
        cap.open(CV_CAP_ANY);
    }
    if(!cap.isOpened())
    {
        printf("Error: could not load a camera or video.\n");
    }

    Mat frame;
    cap >> frame;
    waitKey(5);

    namedWindow("video", 1);
    double fps = cap.get(CV_CAP_PROP_FPS);
    CvSize size = cvSize((int)cap.get(CV_CAP_PROP_FRAME_WIDTH),(int)cap.get(CV_CAP_PROP_FRAME_HEIGHT));

    int codec = CV_FOURCC('M', 'J', 'P', 'G');
    if(!codec){ waitKey(0); return 0; }
    std::cout << "CODEC: " << codec << std::endl;
    std::cout << "FPS: " << fps << std::endl;
    VideoWriter v("Hello.avi",-1,fps,size);
    while(key != 'q'){
        cap >> frame;
        if(!frame.data)
        {
            printf("Error: no frame data.\n");
            break;
        }
        if(frame.empty()){ break; }
        v << frame;
        imshow("video", frame);
        key = waitKey(5);
    }
    return(0);
}

VideoCapture::get(CV_CAP_PROP_FPS)適切な fps を返す、またはVideoWriterすべての Web カメラで普遍的に機能する に fps を与えるにはどうすればよいですか?

4

4 に答える 4

4

CV_CAP_PROP_FPS は、私の知る限り、ビデオでのみ機能します。Web カメラからビデオ データをキャプチャする場合は、自分で正確に時間を計る必要があります。たとえば、タイマーを使用して 40 ミリ秒ごとに Web カメラからフレームをキャプチャし、25 fps ビデオとして保存します。

于 2013-10-30T12:19:35.540 に答える
-2

ウェブカメラからのライブ ビデオの場合、cap.get(cv2.CAP_PROP_FPS) を使用します。

于 2017-07-25T17:06:10.600 に答える