2010-12-29 14 views
1

私はループで処理したい約300のイメージを持っています。すべての反復において、前のループからの画像と画像を比較したい。ループでOpenCVを使って以前の画像を覚えておくには?

私は、現在のイメージを保持しようとしています

に:以前の反復からの画像が中に保存されている

fIplImageHeader 

lastFIplImageHeader 

これは私がそれをやっているし、それは私を与えている方法です例外:

for (int i = 0; i < 300; i++) 
{ 
     // get the path to an image (images are named 0.jpg, 1.jpg etc) 
     // filePath.c_str() contains the path to an image 

     // load the current image to an IplImage object 
     IplImage* fIplImageHeader = cvLoadImage(filePath.c_str()); 

     // create a header for te previous image 
     IplImage* lastFIplImageHeader = cvCreateImageHeader( 
      cvSize(fIplImageHeader->width, fIplImageHeader->height), 
      fIplImageHeader->depth, fIplImageHeader->nChannels 
     ); 

     if (NULL != lastFIplImageHeader->imageData) 
     { 
      // COMPARE IMAGES HERE 
      // only if we are already in 2nd + iteration 
     } 

     // copy the current image to the lastFIplImageHeader 
     // which will hold it in the next iteration 
     if (lastFIplImageHeader) 
     { 
      cvReleaseImage(&lastFIplImageHeader); 
     } 
     cvCopy(fIplImageHeader , lastFIplImageHeader); 

     // do stuff 

     if (fIplImageHeader) 
     { 
      cvReleaseImage(&fIplImageHeader); 
     } 

} 

例外:

First-chance exception at 0x753cb727 in Client.exe: Microsoft C++ exception: cv::Exception at memory location 0x0036ef5c.. 
Unhandled exception at 0x753cb727 in Client.exe: Microsoft C++ exception: cv::Exception at memory location 0x0036ef5c.. 
+1

例外に関する詳細情報が表示される可能性はありますか? Microsoftの世界ではどうやって入手するのかはわかりませんが、opencvからかなり完全な例外の説明を見ることに慣れています(例えば、失敗したアサーションであれば、アサーションされたものを見ることができます)。 –

+0

@Josh Bleecher Snyder私はその例外からもっと情報を得ることはできません...逆アセンブルだけで、アセンブリコードはまったく理解できません。しかし、私はVisual Studio 2010のプロジェクトをアップロードしました:http://www.mediafire.com/?dmidxzuv3fddbof –

+0

プロジェクトからほとんどのイメージを削除しましたので、メディアファイアにアップロードすることができました。しかし、デバッグするのに十分な5つの画像がまだあります。 –

答えて

1

最初のイメージをループの外に読み込み、i = 1から繰り返すことをお勧めします。 ループ外でlastFIplImageHeaderとfIplImageHeaderをどのように初期化したかを示していませんでした。
if (NULL != lastFIplImageHeader->imageData)の行には、lastFIplImageHeaderがnullではないというテストはありません。
assert()の束を追加して、使用しようとしたデータが実際に有効であることを確認することをお勧めします。

関連する問題