0

ビデオから取得したフレーム数をループに入れようとしています。そのフレームを順番に表示した後、opencv2.3を使用して減算したいと思います。

私の問題は、関数が呼び出されていない場所を知ることができないことです。

これが私のコードです:

名前空間cvを使用します。

  void loadImage(IplImage *image, int number)

  {
    // Store path to directory
    char filename[100];
    strcpy(filename, "S:\FINAL PROJECT ABSTRACT\images 1");

 char *frame;

// Convert integer to char    
char frameNo[10];
//sprintf(frame, "%0.3i", number);

// Combine to generate path
  strcat(filename, frameNo);
  strcat(filename, ".jpg");

// Use path to load image
  image = cvLoadImage(filename);
 }

  int _tmain(int argc, _TCHAR* argv[]){

  IplImage *im=0;
  int nImages = 6;
  for (int i = 0; i < nImages; ++i)
 {


  loadImage(im, i);

  char filename[100];
  strcpy(filename, "images 1");

  char frameNo[10];
   sprintf(frameNo, "%03i", i);

  strcat(filename, frameNo);
  strcat(filename, ".jpg");


IplImage *im = cvLoadImage(filename,CV_LOAD_IMAGE_COLOR);
cvNamedWindow("pic");
cvShowImage("pic",im);
cvWaitKey();

}

}

//}

デバッグ中にbuild.btでエラーが発生しません:-frames.exeのループ内の0x77db15deで未処理の例外:0xC0000005:アクセス違反。

strcat(filename、frameNo);で strcat(ファイル名、 "。jpg"); この時点でいくつかのエラーがあります。

4

1 に答える 1

0

文字列の処理はかなり混乱しています。生成しようとしているパスが正確に明確ではありません。

パス生成のほとんどを単一のパスに置き換えることができますsprintf()

char filename[100];
sprintf(filename, "S:\\FINAL PROJECT ABSTRACT\\images 1%03i.jpg",number);
image = cvLoadImage(filename);

(100文字はやや恣意的で、少し短い可能性があります)

それが画像パスに適切な文字列であるかどうかはわかりません。「。」を挿入しようとしていました。そこにあるので、実際のファイルパスがどのように見えるかわかりません。

ただし、loadImage()関数内に画像をロードすると、まったく同じことを実行しているように見えますmain()(ロードしたばかりの画像を破棄し、別のパスを生成してから、代わりにロードします)。したがって、文字列の処理を修正しても、これが機能するとは思えません。

于 2012-12-23T18:04:13.593 に答える