您的位置:首页 > 编程语言 > C语言/C++

图像批量读取(opencv C++ python)

2017-08-20 22:17 3087 查看
用OpenCV处理图像,特别涉及到机器学习,需要批量地读取图像。方法比较简单,唯一的要求就是文件夹下的图片名称是有规律的,本文将介绍一下,如何批量的读入图片,极其简单,各位可以根据自己的需求做一些修改:

首先我们看一下小博我的图片格式,直接借用上次分帧出来的图片吧,我的图片放在D盘img文件夹里,命名格式很怪异,img381—-img475看一下我的贴图吧。



话不多说,贴出我的代码吧,调用了opencv库读入图像,大家拿去用吧。

#include<direct.h>
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
#define null 95
int main()
{
Mat image;
string ImageName;
int n = 381;
while (n <= 475)
{
ImageName = "img";
stringstream ss;
string str;
ss << n;
ss >> str;
ImageName = ImageName + str;
ImageName = "D:\\img\\" + ImageName + ".jpg";
cout << "处理:" << ImageName << endl;
image = imread(ImageName);
if (image.data == 0)
printf("[erro]没有图片\n");
n++;
}
waitKey(0);
system("pause");
return 0;

}


看下运行结果吧。直到读完图片。





方法二:

我们可以直接无脑不按顺序的遍历一遍也可以哦,话不多说,上代码吧:

#include "opencv2/opencv.hpp"
#include <fstream>
#include <iostream>
#include <string>
#include "dirent.h"

using namespace std;
using namespace cv;

int main()
{
DIR *dir;
struct dirent *entry;
if((dir=opendir("D:\\img"))==NULL)
printf( "Error opening \n ");
else {
while((entry=readdir(dir))!=NULL) {
cout<<entry->d_name<<endl;
}
}
closedir(dir);
system("pause");
return 0;
}


下面我挂出Python代码吧,python对文件的操作真的是好简单啊,小编突然好喜欢python了

#!/usr/bin/python
import cv2
import numpy as np
import os
print os.getcwd()
def main():
i=1
while i<=27:
str1=str(i)
path="F:\\img\\"+  str1.zfill(4)+'.jpg'
print path
img=cv2.imread(path)
#print img.shape
cv2.imshow("xiaorun",img)
cv2.waitKey(400)
i=i+1
if __name__=='__main__':
main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息