图片批处理|必备小技能

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

内容目录(由[TOC]自动生成)

图片批处理 简介具体事项1)分析文件的存储状况2)试着分析好,如今很清晰了,是时候准备一些东西了代码实现输出结果:此时已经获取图片的名字和地址——能够开始干活了结果展现git

图片批处理 简介

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

具体事项

1)分析文件的存储状况

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


0文件夹下在3个小文件夹(比较常见的状况)


在每一个次级文件夹(例如1_1文件夹)下存储着图片

看完脑袋痛! 编程

2)试着分析

说明:为了方便理解,我将文件夹命名的比较有规律,从0开始往下一级加1微信

(1)批量读取文件 转化为——三步走:app

A)定位到第一级文件夹(0)位置
B)读取次级文件夹(1_1,1_2,1_3)名字
C)读取次级文件夹下的图片(或者数据)名字spa

好,如今很清晰了,是时候准备一些东西了

A)导入库
Os ——操做系统功能的接口
Tqdm ——加个进度条,方便装逼,不,是查看执行状况
cv2 ——对图片进行一些操做,读取存储和变化等 操作系统

B)图片准备
这里在每一个文件夹下放两张 3d

(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上面了

github.com/SCUTPZW/AI_…

代码编写不易,这些是我本身看了不少人代码,慢慢踩的坑,可能不是效率最高的,可是我但愿这个思路可以对你们有所帮助,固然也欢迎你们提一哈建议,一块儿共同成长。

可否求一波小小的右下角和大大的分享,很是感谢,这段写推文的日子,感触良多,下班后竟然不玩游戏,不刷视频,写写推文一会儿一夜就过去了,很充实。公众号推广的时候很心酸,可能会受那些大号主的鄙视嘲讽,固然也有一块儿成长小伙伴的友情分享和鼓励,但我以为没事,人就应该是在别人的打击下更增强大本身的心里,在朋友的鼓励下更加坚决地前行。

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

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

相关文章
相关标签/搜索