0

私は 2 つのQueryFrameコマンドを次々に使用して、フレームを取得し、CvInvoke.cvAbsDiff. 私のビデオではフレームごとに目に見える変化がありますが、差分画像は常に黒です。

(連続コマンドを使用して) 5 フレームまでスキップしようとしましたがQueryFrame、常に黒いフレームが表示されます。

2 つのフレームのうちの 1 つのヒストグラムを均等化するとAbsDiff、結果が返されます。したがってQueryFrame、同じフレームが返されると思います。

連続した 2 つのフレームを取得するにはどうすればよいですか? 何か案は?

4

1 に答える 1

0

コメントについて申し訳ありません...ここに私が便利だと思った解決策があります:

 private Capture myCapture;
 private Image<Bgr, Byte> frame1;
 private Image<Bgr, byte> frame2;

 private void myFunction1() 
 {
   myCapture = new Capture(@"AnyVideoFileName");
   frame1 = myCapture.QueryFrame();
  }

 private void myEventMethod(object sender, EventArgs e) 
 {
   Application.Idle += myFunction2;
 }

 private void myFunction2(object sender, EventArgs e)
 {
   frame2 = myCapture.QueryFrame();


   Image<Gray, Byte> frame1g = frame1.Convert<Gray,Byte>();
   Image<Gray, Byte> frame2g = frame2.Convert<Gray,Byte>();
   Image<Gray, Byte> diffFrame = frame2g.Clone();

   CvInvoke.cvAbsDiff(frame1g, frame2g, diffFrame);

   frame1 = frame2.Clone();
 }

上記のコードは、それがどのように行われるかを示すためのものです。例外処理、チェック、最適化は含まれていません。

于 2011-03-19T20:05:10.383 に答える