我试图将从视频中取出的帧数放在循环中。我希望按顺序显示那些帧,之后我想用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”); 这一点有一些错误..
答案 0 :(得分:0)
你的字符串处理非常困惑。目前尚不清楚你想要产生什么样的路径。
您可以使用单个sprintf()
char filename[100];
sprintf(filename, "S:\\FINAL PROJECT ABSTRACT\\images 1%03i.jpg",number);
image = cvLoadImage(filename);
(100个字符似乎有些随意 - 可能有点短)
不知道这是你的图像路径的正确字符串,你试图插入'。'在那里,所以我不知道你的真实文件路径是什么样的。
然而,在loadImage()
函数中加载了图像后,您似乎在main()
中执行完全相同的操作(丢弃刚刚加载的图像,生成另一条路径,然后加载而是)。所以我怀疑即使你修复字符串处理它也会起作用。