【问题标题】:How to display successive frames with opencv如何使用opencv显示连续帧
【发布时间】:2011-10-18 22:13:15
【问题描述】:

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

显示图像的标准代码是:

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

【问题讨论】:

  • 如果您没有太多图片,您可以将它们全部加载并存储在 IplImage 数组中。然后使用以下形式的循环: for (i = 0; i

标签: opencv


【解决方案1】:

正如 Link 所建议的,一种选择是编写一个自动生成正确文件名的函数,例如:

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

【讨论】:

    【解决方案2】:

    @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);
    }
    }
    

    【讨论】:

      【解决方案3】:

      尝试使用 OpenCV 的 XML/YAML 持久化机制。编写用于加载的图像路径列表,并使用循环读取这些路径并加载图像。在立体校准的示例中,使用了这样一个列表(OpenCV 安装了一个directory with examples)。

      【讨论】:

      • 您好,谢谢您的回答,但是当我没有很多图片时,这实际上很有用。就我而言,我有 1000 多张图片需要处理。
      • 好吧,它们是不是以某种通用且易于自动记下的方式命名?我有一个包含近 600 张图片的数据库,所以我理解这个问题。您不必手动编写它。只需创建一个生成这些文件名称的循环,然后将这些名称写入 xml 文件。像这样:fs
      猜你喜欢
      • 2021-12-03
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2013-04-28
      相关资源
      最近更新 更多