如何使用opencv显示连续帧
我正在寻找一种使用OpenCV在一个窗口中显示连续帧的解决方案。我有一系列图像(如何使用opencv显示连续帧,opencv,Opencv,我正在寻找一种使用OpenCV在一个窗口中显示连续帧的解决方案。我有一系列图像(001.jpg,002.jpg,003.jpg,等等),但没有视频。我必须在循环中显示它们 显示图像的标准代码为: IplImage* src = cvLoadImage("001.jpg"); cvNamedWindow("My pic"); cvShowImage("My pic",src); cvWaitKey(); 尝试使用OpenCV的XML/YAML持久化机制。编写要加载的图像路径列表,并使用循环读
001.jpg
,002.jpg
,003.jpg
,等等),但没有视频。我必须在循环中显示它们
显示图像的标准代码为:
IplImage* src = cvLoadImage("001.jpg");
cvNamedWindow("My pic");
cvShowImage("My pic",src);
cvWaitKey();
尝试使用OpenCV的XML/YAML持久化机制。编写要加载的图像路径列表,并使用循环读取这些路径并加载图像。在立体声校准示例中,使用了这样一个列表(有一个安装了OpenCV)。如链接所示,一个选项是编写一个自动生成正确文件名的函数,例如:
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
*/
}
IplImage*im;
对于(int i=0;i
另一种选择是研究。@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);
}
}
void loadImage()
{
int-nImages=6;
对于(int i=0;i
如果没有太多图片,可以将它们全部加载并存储在IplImage数组中。然后以循环的形式:for(i=0;i Hi,谢谢你的回答,但当我没有太多图片时,这实际上很有用。在我的情况下,我有1000多张图片,我必须处理。好吧,它们是以某种通用且易于自动记录的方式命名的吗?我有一个包含近600张图片的数据库,以便我了解问题。你没有手动写入。只需创建一个循环,生成这些文件的名称,并将这些名称写入xml文件。类似于:fs