私は ffmpeg をサポートする opencv をビルドします。これは、ビデオを読み取り、フレームを反復処理するコードのスニペットです。
if (argc != 3) {
std::cout<<"Usage: exe input_video_filename skip_frames \n"<<std::endl;
return 0;
}
char* video_fn = argv[1];
int skip_frames = atoi(argv[2]);
VideoCapture cap;
if(!cap.open(video_fn))
{
std::cout<<"error reading video"<<video_fn<<std::endl;
return -1;
}
Mat frame,gray;
int i = 0;
double score = 0;
vector<double> scores;
while(true)
{
if(!**cap.retrieve(frame)**)
{
std::cout<<"error retrieve frame"<<std::endl;
break;
}
if(i%skip_frames)
{
cvtColor(frame,gray,CV_BGR2GRAY);
double sc = compute_cpbdm(gray);
std::cout<<sc<<std::endl;
scores.push_back(sc);
}
}
プログラムは行 cap.open(video_fn) でビデオの読み取りに成功しますが、行 if(!cap.retrieve(frame)) で VideoCapture からフレームを取得できません。mp4 と avi で試しましたが、常に失敗します。同様の問題が発生した人はいますか? それを解決する方法は?どうもありがとう!