0文件夹下在3个小文件夹(比较常见的情况)
在每个次级文件夹(例如1_1文件夹)下存储着图片
看完脑壳痛!
2)试着分析
说明:为了方便理解,我将文件夹命名的比较有规律,从0开始往下一级加1
(1)批量读取文件 转化为——三步走:
A)定位到第一级文件夹(0)位置 B)读取次级文件夹(1_1,1_2,1_3)名字 C)读取次级文件夹下的图片(或者数据)名字
好,现在很清晰了,是时候准备一些东西了
A)导入库 Os ——操作系统功能的接口 Tqdm ——加个进度条,方便装逼,不,是查看执行情况 cv2 ——对图片进行一些操作,读取存储和变化等
B)图片准备 这里在每个文件夹下放两张
(2)批量处理图片
这里你可以添加各种自己喜欢的扫操作,只要不违法,随便怎么搞,为了简单起见,我不搞花里胡哨的,在代码中用了灰度变化操作
(3)批量存储文件
理解了批量读取文件,实际上批量存储文件类似的
代码实现
''' 批量读取文件() ''' import osfrom tqdm import tqdm''' 1.设置必要的读取路径和存储路径 ''' path = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess/0' dst_path = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess' ''' 2.进入次级文件夹并读取文件 ''' dir_names = os.listdir(path) for dir in tqdm(dir_names): path_1 = os.path.join(path, dir) pic_names = os.listdir(path_1) print(pic_names)
输出结果:
100%|██████████| 3/3 [00:00<00:00, 5863.43it/s] ['1_1_1.jpg', '1_1_2.jpg'] ['1_2_1.jpg', '1_2_2.jpg'] ['1_3_1.jpg', '1_3_2.jpg']
此时已经获取图片的名字和地址——可以开始干活了
接下的工作都是相当于对单张图片进行操作了,因为我们循环到最底层(可能表述的不是很准确,大概意思是找到图片了,想怎么搞怎么搞了现在) 代码给你们了,注释的很清楚了哈!!!
import osimport cv2from tqdm import tqdm''' 1.设置必要的读取路径和存储路径 ''' path = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess/0' dst_path0 = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess/0_pro' ''' 2.进入次级文件夹并读取文件 ''' dir_names = os.listdir(path) for dir in tqdm(dir_names): path_1 = os.path.join(path, dir) pic_names = os.listdir(path_1) dst_path1 = os.path.join(dst_path0,dir) ''' 3.对图片进行操作 此时可以认为是在单独一个文件里面的操作,这个文件夹内操作完成之后, 便会执行下一个文件夹,这样子就很好理解怎么做 这段话放在这里可能会影响大家理解,但是是为了告诉大家思路哈。读代码的时候可以删了 ''' for pic_name in pic_names: new_path = os.path.join(path_1, pic_name) dst_pic_name = pic_name.split('.' )[0 ]+'>_<.jpg' dst_path = os.path.join(dst_path1, dst_pic_name) img_0 = cv2.imread(new_path, cv2.IMREAD_GRAYSCALE) isExists = os.path.exists(dst_path1) if not isExists: os.makedirs(dst_path1) cv2.imwrite(dst_path, img_0)
结果展示
文件夹名字、图片名字以及图片都变了,说明,我曹,老子居然成功运行了。。。。
为了方便大家获取代码,代码已经加入肯德基豪华套餐了。what?
不,已经放在github上面了
https://github.com/SCUTPZW/AI_study/tree/master