0

我正在尝试将从视频中获取的帧数放在一个循环中。我想按顺序显示这些帧,然后我想使用 opencv 2.3 减去它。

我的问题是我无法知道函数在哪里被调用。

这是我的代码如下:

使用命名空间简历;

  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 回答