用python(PIL库)图像预处理

        由于最近做一些图像处理有关的学习任务,需要对图片进行预处理,对准格式(统一尺寸,转换通道数,重命名)。在这个过程中遇到了好多问题,查找了一些资料,最终解决了这些问题;

         废话不多说,直接上代码(新手,注释有点多):

"这里对图像的预处理包括:同一名称,统一尺寸,统一通道数;"
from PIL import Image
import os


def rename_image(file_dir, name):
    '''将网上爬下来的图片重命名(更好的观看)'''
    '''第一个参数是目标文件名;
       第二个参数是图片的名称'''
    i = 0
    print("正在重命名图片。。。。。。。")
    for file in os.listdir(file_dir):
        '''获取该路径文件下的所有图片'''
        src = os.path.join(os.path.abspath(file_dir), file)
        '''修改后图片的存储位置(目标文件夹+新的图片的名称)'''
        dst = os.path.join(os.path.abspath(file_dir), name + str(i) + '.png')
        os.rename(src, dst)  # 将图片重新命名
        i = i + 1
    print("-----------重命名完毕-----------")

def process_image_channels(image_path):  #将4通道,A通道的统一成三通道的图像;
    # process the 4 channels .png
    print("正在转换图片通道数。。。。。。。")
    for img_name in os.listdir(image_path):
        img_path = image_path + "/" + img_name    # 获取该图片全称
        image = Image.open(img_path)              # 打开特定一张图片
        image = image.resize((64, 64))            # 设置需要转换的图片大小
        if image.mode == 'RGBA':
            r, g, b, a = image.split()
            image = Image.merge("RGB", (r, g, b))
            os.remove(img_path)                   # 用新生成的3通道的图片代替原来的;
            image.save(img_path)
            #print("这是个四通道的,处理完了!")
        # process the 1 channel image
        elif image.mode != 'RGB':
            image = image.convert("RGBA")
            r, g, b, a = image.split()
            image = Image.merge("RGB", (r, g, b))
            os.remove(img_path)
            image.save(img_path)
            #print("这是个A通道的,处理完了!")

    print("-----------通道数变换完毕-----------")


# size输入形式举例(记得加括号): (64, 64)
def image_reshape(image_path, size):
    print("正在统一图片尺寸。。。。。。。")
    for img_name in os.listdir(image_path):
        img_path = image_path + "/" + img_name    # 获取该图片全称
        image = Image.open(img_path)              # 打开特定一张图片
        image = image.resize(size)            # 设置需要转换的图片大小
        os.remove(img_path)
        image.save(img_path)
    print("-----------尺寸统一完毕-----------")

if __name__ == '__main__':

    image_path = "icon"
    print("ready for process ----------  ")

    # 重命名;
    rename_image(image_path, 'icon_')
    # 统一通道数;
    process_image_channels(image_path)
    # 统一尺寸;
    image_reshape(image_path, (64, 64))

 

在这个代码里面,我定义了三个函数,分别用来做名称,尺寸,通道;

中间遇到的问题有以下几个:

1.在循环文件夹的时候,会出现不能识别Thumbs.db文件的错误,这个需要把这个文件删除掉才行,这个是系统自己生成的文件,不是图片,会使代码报错,百度一下删除这个问价的方法(这个东西贼烦,我弄了好长时间);

这是我解决的方法:https://blog.csdn.net/weixin_41765699/article/details/82620542

 

2.有时候会出现不是图片的文件,也是报错不能识别这个文件,也给他删除掉;

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像预处理是机器学习中非常重要的一步,它可以对图像进行一系列的处理和转换,以便更好地提取有用的特征,从而提高模型的准确性。在 Python 中,有很多强大的图像处理可以用来进行图像预处理,下面简单介绍一些常用的和方法: 1. OpenCV:OpenCV 是一个跨平台的计算机视觉,支持多种编程语言,包括 Python。它提供了丰富的图像处理和计算机视觉算法,可以用来进行图像预处理、特征提取、目标检测等任务。 2. PILPython Imaging Library):PILPython 中另一个常用的图像处理。它提供了基本的图像处理功能,包括图像缩放、裁剪、旋转、色彩调整等。 3. NumPy:NumPy 是 Python 中一个强大的数学计算,也可以用来进行图像处理。它提供了高效的数组操作和数学函数,可以用来进行图像的数组化处理和统计分析。 4. Matplotlib:Matplotlib 是 Python 中一个流行的数据可视化,也可以用来显示和处理图像。它提供了各种绘图函数和工具,可以用来显示图像、绘制直方图、散点图等。 常用的图像预处理方法包括: 1. 缩放和裁剪:对图像进行缩放和裁剪可以调整图像大小和比例,以适应不同的模型和任务需求。 2. 色彩调整:调整图像的亮度、对比度、饱和度等可以改变图像的颜色和明暗度,以便更好地提取特征。 3. 滤波:应用不同的滤波器可以平滑图像、增强边缘、去除噪声等。 4. 形态学处理:形态学处理可以用来提取图像的形状和结构信息,包括膨胀、腐蚀、开运算、闭运算等。 5. 特征提取:使用特征提取算法可以从图像中提取出有用的特征,用于分类、检测和识别等任务。常用的特征提取算法包括 SIFT、SURF、HOG 等。 以上是一些常用的图像预处理和方法,具体的使用可以根据具体的任务需求进行选择和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值