2011-10-18 18 views
2

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

标准代码来显示图像是:

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

如果你没有太多的图片,你可以加载所有这些,将它们存储在IplImage结构的数组。然后用以下形式的循环:for(i = 0; i <= n; i ++){if(i == n)i = 0; .........}你可以通过循环遍历它们,直到让你说你按下一个键(cvWaitKey())。 – Adrian

回答

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

+0

谢谢克里斯现在的作品:) – user1002079

0

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

+0

嗨, 谢谢你的回答,但是当我没有很多图片时,这实际上很有用。在我的情况下,我有超过1000张照片,我必须处理。 – user1002079

+1

好吧,他们是否以某种通用的方式命名并且易于自动写下来?我有一个包含近600张照片的数据库,所以我理解这个问题。您不必手动编写它。只需创建一个生成这些文件名称的循环,并将这些名称写入xml文件。像这样: fs << ADDRESS <<“[”;' for(unsigned j = 0; j <_gal [i] .photos.size(); ++ j){ fs << _ gal [i] .photos [J]; } fs <<“]”<<“}”; _gal [int] .photos [int]返回一个带有图片文件路径的字符串。 – morynicz

1

@克里斯代码的工作,我想增加一个更简单的日常

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