2016-04-18 16 views
0

opencvでC++のプログラムを使用しています フレームのシーケンスから特定のフレームを保存したいのに最後のフレームだけが保存されます。 私は次のコードを持っている 良くご紹介しましょう:あなたは100個のフレームが手にしている見ることができるようにopencvのカメラから特定のフレームを取得して保存するC++

Mat frame,img1,img2; 
    for(int i = 0; i < 100; i++) 
     { 
      cout<<i<<endl; 
      waitKey(1); 
      video >> frame; 

      if (i==10) 
       { 
        img2=frame; 

       } 
      namedWindow("img"); 
      imshow("img",frame); 
     } 

namedWindow("pic"); 
imshow("pic",img2); 
waitKey(30); 
video.release(); 
waitKey(0); 

を、私はループが 終了したときにIMG2第10フレームを保存し、forループの外にそれを表示したいが、ここの問題は10番目のフレームを表示していないことです!確かにそれは最後のフレームを示しています!

+0

'IMG2 = frame.clone();' – Miki

+0

感謝親愛なる友人 を動作するはずです、それが助けた適切 –

+0

は嬉しい作品; D ...として掲載答えは – Miki

答えて

0

img2 = frame;は、cv::Matのコピーを実行します。ただし、Matをコピーすると、Matのヘッダーだけがコピーされますが、両方のオブジェクトが同じデータを参照します。したがって、frameのデータを変更すると、img2も変更されます。

必要なのはディープコピーです。つまり、ヘッダーだけでなくデータもコピーする必要があります。そうすると、frameを変更してもimg2には影響しません。

あなたは単にと深いコピーを実行することができます。

img2 = frame.clone(); 
関連する問題