に異なり、同じフレームを読み込みます。私は数週間前にJavaでOpencvを使い始めました。私のプログラムでは、aviファイルからフレームを読み込むためにビデオキャプチャを使用します。昨日、私は私のprogremの異なる実行の上に、ファイルから読み込んだn番目のフレームは、前回の実行中に、同じファイルから読み込ま同じn番目のフレームと異なっている、ということに気づきました。私は同じフレーム番号にビデオキャプチャをリセットした後、同じフレームの2つのコピーを引くことによってこれを確認しました。これが期待されているのですか、何か間違っていますか?ここ はコードです。このコードでvideocaptureは、私は、フォーラムに新しいです複数の通話
/*==========================*/
for (int j = 0; j < 100; j++){
Mat img = new Mat();
Mat m1 = new Mat();
Mat m2 = new Mat();
VideoCapture vc = new VideoCapture(filename);
vc.set(Videoio.CAP_PROP_POS_FRAMES, 0);
for (int i = 0; i < 9; i++) vc.grab();
vc.read(img);
m1 = img.clone();
Imgproc.cvtColor(m1, m1, Imgproc.COLOR_BGR2GRAY);
vc.release();
vc = new VideoCapture(filename);
vc.set(Videoio.CAP_PROP_POS_FRAMES, 0);
for (int i = 0; i < 9; i++) vc.grab();
vc.read(img);
m2 = img.clone();
Imgproc.cvtColor(m2, m2, Imgproc.COLOR_BGR2GRAY);
vc.release();
Mat m3 = new Mat();
Core.absdiff(m1, m2, m3);
if (Core.countNonZero(m3) > 0)System.out.println(Core.sumElems(m3));
}
/*==========================*/
私はビデオからの最初のフレームのみを抽出することに興味を持っています。 「グラブ」コールは、2つの内部ループにあり、VideoCaptureオブジェクト内のフレームバッファであると思われるものが消耗していることを確認します。バッファサイズは私の場合は9ですが、なぜそれがわかりません。外側のループは、プログラム全体を複数回テストするだけです。 System.outの出力は、時には非ゼロであり、例えば、100回のループ反復にわたって5-6回である。代わりに、私のような、absdiffの出力はゼロであるべき、基本的にプログラムが二度同じ最初のフレームを読んでいるように、それは常にゼロであることを期待してしまいます。
あなたはすべて '.grab()'の呼び出しを削除する場合はどうなりますか? 2番目のVideoCaptureを使用できますか?あなたのファイルはビデオですか?特別なエンコーディングがありますか?はいの場合、最初のフレームはキーフレームですか?あなたは入力を提供できますか? – Micka
.grabを.readに置き換えても、私はまだ同じ問題があります。 私は最初のビデオキャプチャをリリースし、新しいビデオキャプチャを割り当てているので、2番目のビデオキャプチャを効果的に使用しています。 私が使用しているビデオはリストの2番目のものです: ftp://motinas.elec.qmul.ac.uk/pub/iLids/ 最初のフレームがkフレームであるかどうかはわかりませんが、同じ問題は、私が2番目、3番目などを読んでも存在します... – gaetano