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. 结果展示
有关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
感谢大家的关注和支持,希望我写的文章能够让你们有收获。
如有不足,还请各位多多指正!
版权声明:本文为博主一览天下945原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/qq_38500228/article/details/122574431