图片批处理|必备小技能

↘锁芯ラ 提交于 2021-02-14 23:25:19


微信公众号:AI算法与图像处理
关注可了解更多的编程小技巧和优质资源。问题或建议,请公众号留言;
如果你觉得Md2All对你有帮助,欢迎 好看和分享哈

内容目录

图片批处理 简介具体事项1)分析文件的存储情况2)试着分析
代码实现输出结果:
结果展示

图片批处理 简介

图片批处理操作或者说数据的批处理在这个数据爆炸的时代经常会用到,除了特殊的情况,否则我们不会想着靠人力去一个一个的完成数据的处理(土法炼钢?),因此交给我们的苦力——电脑。
明确目标:把时间拿来做有价值的事情
思路:
1.批量读取文件
2.批量处理文件
3.批量存储文件
简称——3P操作?粗鄙之语。。。

具体事项

1)分析文件的存储情况

看一下文件的存储是什么鬼样子的

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 os
from tqdm import tqdm

'''
1.设置必要的读取路径和存储路径
'''

# path = os.getcwd() # 获取当前路径
# 处理的图片不是在当前文件下,可以直接添加绝对路径
path = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess/0'
## print(path) # 习惯每步都确认一哈有没有出错,大家可以直接忽略
dst_path = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess' # 处理完成后的图片存储位置

'''
2.进入次级文件夹并读取文件
'''

dir_names = os.listdir(path)    # 读取次级文件夹名字
# print(dir_names)
for dir in tqdm(dir_names):
    path_1 = os.path.join(path, dir) # 获取次级文件夹的路径 ||次级1开头
    # print(path_1)
    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 os
import cv2
from tqdm import tqdm
'''
1.设置必要的读取路径和存储路径
'''

# path = os.getcwd() # 获取当前路径
# 处理的图片不是在当前文件下,可以直接添加绝对路径
path = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess/0'   # 第一级文件夹 0 开头
## print(path) # 习惯每步都确认一哈有没有出错,大家可以直接忽略
dst_path0 = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess/0_pro' # 处理完成后的图片存储位置
'''
2.进入次级文件夹并读取文件
'''

dir_names = os.listdir(path)    # 读取次级文件夹名字
# print(dir_names)
# tqdm是为了显示当前读取到第n个文件夹了,当然可以换到其他位置,不了解的小伙伴看之前的文章哈
for dir in tqdm(dir_names):
    path_1 = os.path.join(path, dir) # 获取次级文件夹的路径 ||次级1开头
    # print(path_1)
    pic_names = os.listdir(path_1)    #读取图片的名字
    # print(pic_names)
    dst_path1 = os.path.join(dst_path0,dir) # 对应的次级存储路径
    '''
    3.对图片进行操作
    此时可以认为是在单独一个文件里面的操作,这个文件夹内操作完成之后,
    便会执行下一个文件夹,这样子就很好理解怎么做
    这段话放在这里可能会影响大家理解,但是是为了告诉大家思路哈。读代码的时候可以删了
    '''

    for pic_name in pic_names:
        new_path = os.path.join(path_1, pic_name)
        # print(new_path) # 图片的读取路径
        dst_pic_name = pic_name.split('.')[0]+'>_<.jpg' # 对处理完的图片名字进行修改,比较被修理之后会哭的
        # print(dst_pic_name)
        dst_path = os.path.join(dst_path1, dst_pic_name)
        # print(dst_path)
        # 读取图片
        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

码编写不易,这些是我自己看了很多人代码,慢慢踩的坑,可能不是效率最高的,但是我希望这个思路能够对大家有所帮助,当然也欢迎大家提一哈建议,一起共同成长。


能否求一波小小的右下角和大大的分享,非常感谢,这段写推文的日子,感触良多,下班后居然不玩游戏,不刷视频,写写推文一下子一晚上就过去了,很充实。公众号推广的时候很心酸,可能会受那些大号主的鄙视嘲讽,当然也有一起成长小伙伴的友情分享和鼓励,但我觉得没事,人就应该是在别人的打击下更加强大自己的内心,在朋友的鼓励下更加坚定地前行。


有个小伙伴,初试完很忧伤,担心考不上,也害怕调剂也上不了理想的学校。我就是调剂过来的,明白那种痛苦,真心希望你应该要自信,把这种不如意的日子当做是生活对你的考验,也许现在我也是在接受这这种考验,我们都应该坚持,或许坚持下来的结果不一定是你想要的,但是你得到那种坚持自我的韧性是你意想不到的宝贵财富。


加油!!!对你说,也对我自己说,哈哈哈,小老板多捞哦!


 END 



【推荐阅读】

良心推荐:机器学习入门资料汇总及学习建议(2018版)

三本本科生能搞人工智能吗?

2018年人工智能科技进展大突破总结

用聚类方法结合卷积网络,实现无监督端到端图像分类

资源说明


【有趣的可视化操作】

用Python给你的代码上个进度条吧  | 【代码也要面子的】

用Python搞出自己的云词图 | 【带你装起来】

python打印神兽佛祖和美女 | Buddha Bless, No Bug !

Python绘制可爱的卡通人物&nbsp;|&nbsp;【turtle使用】

用python搞点“心”东西


本文分享自微信公众号 - AI算法与图像处理(AI_study)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!