opencv如何一次性读入大量图片
如题,IplImage*source=cvLoadImage("001.jpg",0);我只知道opencv读图片时是要用到图片名的,那这种用“”的文件名的变量怎么实现一...
如题,
IplImage* source=cvLoadImage("001.jpg",0);
我只知道opencv读图片时是要用到图片名的,那这种用“”的文件名的变量怎么实现一次性读入几百张图片的功能(用循环的话怎么解决名字要变化的问题?) 展开
IplImage* source=cvLoadImage("001.jpg",0);
我只知道opencv读图片时是要用到图片名的,那这种用“”的文件名的变量怎么实现一次性读入几百张图片的功能(用循环的话怎么解决名字要变化的问题?) 展开
4个回答
展开全部
简单的字符串操作就能完成你要的工作。比如,你的图片是001至100,则你只需要制作一个字符串char c[128],来表示你的文件名就可。字符串初始为空。然后用sprintf(c,"%d",100)就能把100写到c中。然后用strcat(c,".jpg")就可以把c变为100.jpg。然后你把上面cvLoadImage的参数改成c就行了。
当然,如果你的文件名是1-100,这个方法很好用。如果是001-100,就是标准三位数,你就麻烦了。你可以用一些字符串转换的办法。比如,设a为临时字符串,初始为空,用strlen(c)读取c的长度,然后用strcat(a,"0")来给a添加前面的0,再把两个字符串衔接,用strcat(a,c)和strcat(a,".jpg")完成处理。这是笨办法,但是字符串操作确实基础功底。
当然,如果你的文件名是1-100,这个方法很好用。如果是001-100,就是标准三位数,你就麻烦了。你可以用一些字符串转换的办法。比如,设a为临时字符串,初始为空,用strlen(c)读取c的长度,然后用strcat(a,"0")来给a添加前面的0,再把两个字符串衔接,用strcat(a,c)和strcat(a,".jpg")完成处理。这是笨办法,但是字符串操作确实基础功底。
展开全部
1、简单却比较傻的方法:将所有图片的名字存储在一个字符串数组中,然后依次遍历数组,得到图片名,然后读取图片。
eg: int i = 0;
char *pic[3] = {"1.jpg","2.jpg","3.jpg"};
char picName[10];
IplImage* source;
for(i = 0 ; i < 3 ; i++)
{
strcpy(picName , pic[i]);//获取图片名
source=cvLoadImage(picName,0);
……
}
2、无论是windows平台、还是linux平台等,都可以调用系统API,获得某一目录下的所有文件名,然后利用字符串处理,根据文件名后缀来判断是否是文件,从而得到图片的文件名,这样也可以得到cvLoadImage()函数的第一个参数。
eg: int i = 0;
char *pic[3] = {"1.jpg","2.jpg","3.jpg"};
char picName[10];
IplImage* source;
for(i = 0 ; i < 3 ; i++)
{
strcpy(picName , pic[i]);//获取图片名
source=cvLoadImage(picName,0);
……
}
2、无论是windows平台、还是linux平台等,都可以调用系统API,获得某一目录下的所有文件名,然后利用字符串处理,根据文件名后缀来判断是否是文件,从而得到图片的文件名,这样也可以得到cvLoadImage()函数的第一个参数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我在D盘放置了十张图片,文件名分别是test1~test10,通过运行下面的程序就可以连续打开是个窗口,显示这十张图片了,对于你需要读取几百张图片,只要文件名有规律可循,都可以用这种方法实现
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <string.h>
char filename[100];
char windowname[100];
int main(int argc, char *argv[])
{
for(int i=1;i<=10;i++)
{
sprintf(filename,"D:/test%d.jpg",i);
sprintf(windowname,"window%d.jpg",i);
IplImage* pScr=cvLoadImage(filename,1);
cvNamedWindow(windowname,CV_WINDOW_AUTOSIZE);
cvShowImage(windowname,pScr);
}
cvWaitKey(0);
}
希望可以帮到你!!!
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <string.h>
char filename[100];
char windowname[100];
int main(int argc, char *argv[])
{
for(int i=1;i<=10;i++)
{
sprintf(filename,"D:/test%d.jpg",i);
sprintf(windowname,"window%d.jpg",i);
IplImage* pScr=cvLoadImage(filename,1);
cvNamedWindow(windowname,CV_WINDOW_AUTOSIZE);
cvShowImage(windowname,pScr);
}
cvWaitKey(0);
}
希望可以帮到你!!!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用sprintf格式化你的图片名即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询