opencv如何一次性读入大量图片

如题,IplImage*source=cvLoadImage("001.jpg",0);我只知道opencv读图片时是要用到图片名的,那这种用“”的文件名的变量怎么实现一... 如题,
IplImage* source=cvLoadImage("001.jpg",0);
我只知道opencv读图片时是要用到图片名的,那这种用“”的文件名的变量怎么实现一次性读入几百张图片的功能(用循环的话怎么解决名字要变化的问题?)
展开
 我来答
百度网友78817eb
2011-06-08 · TA获得超过885个赞
知道答主
回答量:87
采纳率:0%
帮助的人:39万
展开全部
简单的字符串操作就能完成你要的工作。比如,你的图片是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")完成处理。这是笨办法,但是字符串操作确实基础功底。
百度网友80bedb5
2011-06-05
知道答主
回答量:20
采纳率:0%
帮助的人:0
展开全部
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()函数的第一个参数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
落实思树者
推荐于2017-11-24 · TA获得超过990个赞
知道小有建树答主
回答量:213
采纳率:100%
帮助的人:165万
展开全部
我在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);

}
希望可以帮到你!!!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1c1abfb3b
2011-06-03 · 超过28用户采纳过TA的回答
知道答主
回答量:85
采纳率:0%
帮助的人:80.5万
展开全部
用sprintf格式化你的图片名即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式