我正在尝试将从视频中取出的帧数放在循环中。我想按顺序显示这些帧,然后我想用opencv 2.3减去它。
我的问题是,我不知道哪里函数没有被调用。
下面是我的代码: void loadImage(IplImage *image, int number)
{
// Store path to directory
char filename[100];
strcpy(filename, "S:FINAL PROJECT ABSTRACTimages 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();
}
}
//}
我在构建中没有得到任何错误。但在调试时显示:-在frame .exe循环中0x77db15de未处理异常:0xC0000005:访问冲突。
在strcat(文件名,frameNo);strcat(文件名,"jpg");
你的字符串处理非常混乱。不清楚你想要生成的路径。
您可以用单个sprintf()
替换大部分路径生成
char filename[100];
sprintf(filename, "S:\FINAL PROJECT ABSTRACT\images 1%03i.jpg",number);
image = cvLoadImage(filename);
(100个字符似乎有点随意-可能有点短)
不知道这是否是您的图像路径的正确字符串,您试图插入一个'。,所以我不知道你真正的文件路径是什么样子的。
然而,在loadImage()
函数中加载了图像,然后你似乎在main()
中做同样的事情(扔掉你刚刚加载的图像,生成另一个路径,然后加载它)。所以我怀疑这是否会工作,即使你修复字符串处理。