用opencv和pillow实现嵌套文件夹照片白边裁剪&格式转换

用opencv和pillow实现嵌套文件夹照片白边裁剪&格式转换

    • 1. 导包
    • 2. 设置路径
    • 3. 查看读取路径中的文件夹名称
    • 4. 创建写入路径中的同样名称的文件夹
    • 5. 实现裁剪&格式转换
    • 6. 结果展示

1. 导包

import os
import numpy as np
import cv2
from PIL import Image

2. 设置路径

使用pillow路径就把opencv注释掉,使用opencv就把pillow注释掉

path = r"fruit1"
new_path = r"fruit2/"  # PILLOW的相对路径
#new_path = r"fruit3/"  # OPENCV的相对路径

3. 查看读取路径中的文件夹名称

image_names = os.listdir(path)
print(image_names)

4. 创建写入路径中的同样名称的文件夹

for n in image_names:
    print(n)
    n_path = os.path.join(new_path, n)
    print(n_path)
    if not os.path.exists(n_path):
        os.mkdir(new_path + n)

5. 实现裁剪&格式转换

实现思路:
创建读取文件夹中每一个子文件夹中的图片路径,作为读取路径
创建写入文件夹中每一个子文件夹中的图片路径,作为写入路径
在读取和写入的过程中完成白边裁剪和图片格式转换
借助pillow和opencv两个模块,使用pillow就把opencv的代码块注释掉,使用opencv就把pillow的代码块注释掉即可

for n in image_names:
    print(n)
    path1 = os.path.join(path, n)  # 创建原始文件夹中的每一个子文件夹路径
    path2 = os.path.join(new_path, n)  # 创建新文件夹中的每一个子文件夹路径
    print(path1, path2)
    for r in os.listdir(path1):  # 遍历每一个原始文件子文件夹路径中的图片
        print("照片名称:", r)
        path_in = os.path.join(path1, r)  # 创建原始文件夹的子文件夹中即将读取的图片路径
        print(path_in)
        r = r.replace(".png", ".jpg")  # 图片输出的格式转化
        path_out = os.path.join(path2, r)  # 创建新文件夹的子文件夹中即将写入的图片路径
        print(path_out)

        # PILLOW进行图像格式转化+裁剪
        img = Image.open(path_in)
        size = img.size
        print(size)  # (220, 220)
        img = img.crop((0, 28, size[1], size[0] - 27))  # 左上右下
        img = img.convert("RGB")
        img.save(path_out, "JPEG", quality=80, optimize=True, progressive=True)

        # OPENCV进行图像格式转化+裁剪
        # img = cv2.imdecode(np.fromfile(path_in, dtype=np.uint8), cv2.IMREAD_COLOR)
        # print(img)  # 不为None
        # size = img.shape
        # a = 28
        # b = size[0] - 27
        # c = 0
        # d = size[1]
        # cropImg = img[a:b, c:d]
        # cv2.imencode(".jpg", cropImg)[1].tofile(path_out)

6. 结果展示

用opencv和pillow实现嵌套文件夹照片白边裁剪&格式转换_第1张图片

用opencv和pillow实现嵌套文件夹照片白边裁剪&格式转换_第2张图片
有关pillow和opencv的单独的图片裁剪以及读取写入功能,请查看我的另外两篇帖子:
https://blog.csdn.net/qq_38500228/article/details/122556417?spm=1001.2014.3001.5502
https://blog.csdn.net/qq_38500228/article/details/122560839?spm=1001.2014.3001.5502

感谢大家的关注和支持,希望我写的文章能够让你们有收获。
如有不足,还请各位多多指正!

你可能感兴趣的:(CV数据处理,opencv,计算机视觉,人工智能)