如何使用opencv显示连续的帧

时间:2011-10-18 22:13:15

标签: opencv

我正在寻找一种使用OpenCV在一个窗口中显示连续帧的解决方案。我有一系列图片(001.jpg002.jpg003.jpg等),但不是视频。我必须在循环中显示它们。

显示图像的标准代码是:

IplImage* src = cvLoadImage("001.jpg");
cvNamedWindow("My pic"); 
cvShowImage("My pic",src); 
cvWaitKey();

3 个答案:

答案 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)。