我正在寻找一种使用OpenCV在一个窗口中显示连续帧的解决方案。我有一系列图片(001.jpg
,002.jpg
,003.jpg
等),但不是视频。我必须在循环中显示它们。
显示图像的标准代码是:
IplImage* src = cvLoadImage("001.jpg");
cvNamedWindow("My pic");
cvShowImage("My pic",src);
cvWaitKey();
答案 0 :(得分:1)
如链接所示,一种选择是编写一个自动生成正确文件名的函数,例如:
void loadImage(IplImage *image, int number)
{
// Store path to directory
char filename[100];
strcpy(filename, "/path/to/files");
// Convert integer to char
char frameNo[10];
sprintf(frame, "%03i", number);
// Combine to generate path
strcat(filename, frameNo);
strcat(filename, ".bmp");
// Use path to load image
image = cvLoadImage(filename);
}
然后可以在循环中使用已知数量的图像
IplImage *im;
for (int i = 0; i < nImages; ++i)
{
loadImage(im, i);
/*
Do stuff with im
*/
}
另一种选择是调查boost directory iterator。
答案 1 :(得分:1)
@Chris代码有效,我想添加一个更简单的例程
void loadImage()
{
int nImages = 6;
for (int i = 0; i < nImages; ++i)
{
IplImage *image;
char filename[100];
strcpy(filename, "images/");
char frameNo[10];
sprintf(frameNo, "%03i", i);
strcat(filename, frameNo);
strcat(filename, ".jpg");
image = cvLoadImage(filename);
cvNamedWindow("pic");
cvShowImage("pic",image);
cvWaitKey(1000);
}
}
答案 2 :(得分:0)
尝试使用OpenCV的XML / YAML持久性机制。编写用于加载的图像路径列表,并使用循环读取这些路径并加载图像。在立体声校准的示例中,使用了这样的列表(安装了OpenCV directory with examples)。