OpenCV 2.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 );
}
その結果、ビデオは空のファイルになり、開くことができませんでした。ここで何を間違えたのですか?
問題は、使用しているコーデックにある可能性があります。
ものが正しく機能していることを確認する簡単なテストは、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();
フレームサイズ1200 * 1600の_cv::VideoWriter output
_を宣言します。したがって、cv::resize(img,img,cv::Size(1200,1600));
before output.write(img);
を使用して、フレームのサイズを1200 * 1600に変更します