显示视频捕获的循环中连续帧的数量

时间:2012-12-23 10:14:37

标签: visual-c++ image-processing opencv

我试图将从视频中取出的帧数放在循环中。我希望按顺序显示那些帧,之后我想用opencv 2.3减去它。

我的问题是我无法知道哪个函数没有被调用。

这是我的代码:

使用namespace 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(filename,“.jpg”); 这一点有一些错误..

1 个答案:

答案 0 :(得分:0)

你的字符串处理非常困惑。目前尚不清楚你想要产生什么样的路径。

您可以使用单个sprintf()

替换大部分路径生成
char filename[100];
sprintf(filename, "S:\\FINAL PROJECT ABSTRACT\\images 1%03i.jpg",number);
image = cvLoadImage(filename);

(100个字符似乎有些随意 - 可能有点短)

不知道这是你的图像路径的正确字符串,你试图插入'。'在那里,所以我不知道你的真实文件路径是什么样的。

然而,在loadImage()函数中加载了图像后,您似乎在main()中执行完全相同的操作(丢弃刚刚加载的图像,生成另一条路径,然后加载而是)。所以我怀疑即使你修复字符串处理它也会起作用。