13

OpenCV2.4.3を使用してビデオファイルの読み取りと書き込みを行っています。私のコードは次のようなものです:

cv::VideoCapture video;
video.open ( "D:\\testVideo.avi" );
cv::VideoWriter output;
output.open ( "D:\\outputVideo.avi", CV_FOURCC('D','I','V','X'), 120, cv::Size ( 1200,1600), true );
cv::Mat img;

for ( int n = 0; ; n ++ )
{
     video >> img;
     output.write ( img );
 }

その後、結果のビデオは空のファイルであり、私はそれを開くことができませんでした。私はここで何を間違えましたか?

4

2 に答える 2

14

問題は、使用しているコーデックにある可能性があります。

自分のものが正しく機能していることを確認する簡単なテストは、Webカメラからフレームを取得してビデオファイルに書き込むことです。

// Load input video
cv::VideoCapture input_cap(argv[1]);
if (!input_cap.isOpened())
{
        std::cout << "!!! Input video could not be opened" << std::endl;
        return;
}

// Setup output video
cv::VideoWriter output_cap(argv[2], 
               input_cap.get(CV_CAP_PROP_FOURCC),
               input_cap.get(CV_CAP_PROP_FPS),
               cv::Size(input_cap.get(CV_CAP_PROP_FRAME_WIDTH),
               input_cap.get(CV_CAP_PROP_FRAME_HEIGHT)));

if (!output_cap.isOpened())
{
        std::cout << "!!! Output video could not be opened" << std::endl;
        return;
}


// Loop to read from input and write to output
cv::Mat frame;

while (true)
{       
    if (!input_cap.read(frame))             
        break;

    output_cap.write(frame);
}

input_cap.release();
output_cap.release();
于 2012-12-01T11:18:08.437 に答える
5

cv::VideoWriter outputフレームサイズ1200*1600を宣言します。したがって、 cv::resize(img,img,cv::Size(1200,1600));以前を使用してフレームのサイズを1200*1600に変更しますoutput.write(img);

于 2013-05-27T11:14:43.790 に答える