python实现快速把多张图片一分为二——甚至分成更多和旋转

python实现快速把多张图片一分为二——甚至分成更多和旋转

因为笔者最近由于学习(娱乐)需要,需要把大量图片从中间一分为二。我翻遍了也没有找到这样的方法或者程序只好学以致用拿python写了一个。

主要使用了pillow库和os库,文章末尾会附一下参考链接

因为不会写函数(实际是写出来运行不了…)只好写两遍来达成对应目标了

需要注意的是要切割的那个文件夹里面不能有图片以外的文件格式,否则读取到的时候会报错(应该写个分支就能过滤掉)

截取图片所用的集合坐标(box)分别是要截取的部分的左上角和右下角;图片左上角坐标为(0,0), 右下角坐标是长宽的最大值

由于文件原因这里就不放我的结果预览啦

1.遍历一个文件夹中所有图片并把它们一分为二

from PIL import Image
import os

path = 'X:\\文件\\新建文件夹'   #文件目录
#path这个目录处理完之后需要手动更改
path_list = os.listdir(path)
#path_list.remove('.DS_Store')   #macos中的文件管理文件,默认隐藏,这里可以忽略,如果是mac可能需要加回这行(笔者没有用过mac)
print(path_list)

for i in path_list: #截左半张图片
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (0,0,w*0.5,h) #box元组内分别是 所处理图片中想要截取的部分的 左上角和右下角的坐标
    img = img.crop(box)
    print('正在截取左半张图...')
    img.save('L'+i) #这里需要对截出的图加一个字母进行标识,防止名称相同导致覆盖
    print('L-',i,'保存成功')

for i in path_list: #截取右半张图片
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (w*0.5,0,w,h)
    img = img.crop(box)
    print('正在截取右半张图...')
    img.save('R'+i)
    print('R-',i,'保存成功')
    
print("'{}'目录下所有图片已经保存到本文件目录下。".format(path))


2.遍历一个文件夹中所有图片并把它们一分为十

同理,当需要截取图片的十个部分时可以增加运行次数并更改参数:

from PIL import Image
import os

path = 'X:\\文件\\拼图a4'   #文件目录
#path这个目录截完之后需要手动更改
path_list = os.listdir(path)
print(path_list)

for i in path_list:
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (0,0,w*0.1,h)
    img = img.crop(box)
    print('正在截取第一部分...')
    img.save('A'+i)
    print('A-',i,'保存成功')

for i in path_list:
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (w*0.1,0,w*0.2,h)
    img = img.crop(box)
    print('正在截取第二部分...')
    img.save('B'+i)
    print('B-',i,'保存成功')

for i in path_list:
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (w*0.2,0,w*0.3,h)
    img = img.crop(box)
    print('正在截取第三部分...')
    img.save('C'+i)
    print('C-',i,'保存成功')

for i in path_list:
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (w*0.3,0,w*0.4,h)
    img = img.crop(box)
    print('正在截取第四部分...')
    img.save('D'+i)
    print('D-',i,'保存成功')

for i in path_list:
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (w*0.4,0,w*0.5,h)
    img = img.crop(box)
    print('正在截取第五部分...')
    img.save('E'+i)
    print('E-',i,'保存成功')

for i in path_list:
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (w*0.5,0,w*0.6,h)
    img = img.crop(box)
    print('正在截取第六部分...')
    img.save('F'+i)
    print('F-',i,'保存成功')

for i in path_list:
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (w*0.6,0,w*0.7,h)
    img = img.crop(box)
    print('正在截取第七部分...')
    img.save('G'+i)
    print('G-',i,'保存成功')

for i in path_list:
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (w*0.7,0,w*0.8,h)
    img = img.crop(box)
    print('正在截取第八部分...')
    img.save('H'+i)
    print('H-',i,'保存成功')

for i in path_list:
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (w*0.8,0,w*0.9,h)
    img = img.crop(box)
    print('正在截取第九部分...')
    img.save('I'+i)
    print('I-',i,'保存成功')

for i in path_list:
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)

    box = (w*0.9,0,w,h)
    img = img.crop(box)
    print('正在截取第十部分...')
    img.save('J'+i)
    print('J-',i,'保存成功')

print("'{}'目录下所有图片已经保存到本文件目录下。".format(path))


3.遍历一个文件夹中所有图片并把它们按宽度旋转

通过pillow库我们还可以来顺带旋转图片到自己想要的方向:

from PIL import Image
import os

path = 'X:\\文件\\新建文件夹'   #文件目录
#path这个目录截完之后需要手动更改
path_list = os.listdir(path)
print(path_list)

for i in path_list:
    a = open(os.path.join(path,i),'rb')
    img = Image.open(a)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    print('正在处理图片',i,'宽',w,'长',h)
    if h > w:
        img.rotate(270, expand=True).save('0'+i) #这里具体去看pillow里的rotate方法
        print('旋转成功')
    
print("'{}'目录下所有图片已经保存到本文件目录下。".format(path))


参考

pillow.Image常用操作如图片裁剪,旋转,缩放,翻转等https://blog.csdn.net/weixin_42074867/article/details/90440294

操作图像4-pillow-旋转,翻转图像、更改单个元素https://blog.csdn.net/qq_36482772/article/details/53346511

Python实现图片裁剪的两种方式——Pillow和OpenCVhttps://blog.csdn.net/hfutdog/article/details/82351549

python顺序读取文件夹中的图片方法https://blog.csdn.net/gbz3300255/article/details/108238083

Python获取文件夹下的文件和子文件夹https://blog.csdn.net/JohinieLi/article/details/76660733

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 您好,以下是利用OpenCV和Python实现图片拼接成一个视频的代码示例: ```python import cv2 import os # 设置要拼接的图片路径和输出视频路径 img_path = 'image_folder/' video_path = 'output_video.avi' # 获取图片列表 img_list = os.listdir(img_path) # 获取第一图片的大小 img = cv2.imread(os.path.join(img_path, img_list[])) height, width, layers = img.shape # 创建视频对象 video = cv2.VideoWriter(video_path, cv2.VideoWriter_fourcc(*'XVID'), 24, (width, height)) # 遍历图片列表,将每图片写入视频 for img_name in img_list: img = cv2.imread(os.path.join(img_path, img_name)) video.write(img) # 释放视频对象 video.release() ``` 以上代码将会把指定文件夹中的所有图片按照文件名的顺序拼接成一个视频,并保存到指定路径下。 ### 回答2: 要利用OpenCV和Python实现图片拼接成一个视频,可以按照以下步骤编写代码: 1. 导入所需的库: ```python import cv2 import os ``` 2. 指定图片文件夹路径和视频输出路径: ```python image_folder = '图片文件夹路径' video_name = '视频输出路径/视频名称.mp4' ``` 3. 获取图片文件夹中所有图片的文件名列表: ```python images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")] images.sort() # 按文件名排序 ``` 4. 获取第一图片的尺寸作为视频帧的尺寸: ```python frame = cv2.imread(os.path.join(image_folder, images[0])) height, width, layers = frame.shape ``` 5. 初始化视频编码器: ```python fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 可根据视频格式进行修改 video = cv2.VideoWriter(video_name, fourcc, 30, (width, height)) ``` 6. 遍历图片列表,将每图片写入视频: ```python for image in images: video.write(cv2.imread(os.path.join(image_folder, image))) ``` 7. 释放资源: ```python cv2.destroyAllWindows() video.release() ``` 完成以上步骤后,运行代码即可将指定文件夹中的多图片拼接成一个视频并保存在指定路径。 ### 回答3: 要使用OpenCV和Python来将多图片拼接成一个视频,可以按照以下步骤实现: 1. 导入必要的库:导入OpenCV库和Python库。 ```python import cv2 import os ``` 2. 设置输入的图片路径和输出视频的路径。 ```python image_folder = '图片文件夹路径' video_name = '视频输出路径/视频名字.mp4' ``` 3. 获取图片列表并按文件名排序。 ```python images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")] images.sort(key=lambda x: int(x.split('.')[0])) ``` 4. 获取第一图片的尺寸,并创建一个视频写入对象。 ```python frame = cv2.imread(os.path.join(image_folder, images[0])) height, width, layers = frame.shape video = cv2.VideoWriter(video_name, 0, 1, (width, height)) ``` 5. 将每图片读取并写入视频。 ```python for image in images: video.write(cv2.imread(os.path.join(image_folder, image))) ``` 6. 释放资源。 ```python cv2.destroyAllWindows() video.release() ``` 完整的代码如下: ```python import cv2 import os image_folder = '图片文件夹路径' video_name = '视频输出路径/视频名字.mp4' images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")] images.sort(key=lambda x: int(x.split('.')[0])) frame = cv2.imread(os.path.join(image_folder, images[0])) height, width, layers = frame.shape video = cv2.VideoWriter(video_name, 0, 1, (width, height)) for image in images: video.write(cv2.imread(os.path.join(image_folder, image))) cv2.destroyAllWindows() video.release() ``` 将以上代码中的"图片文件夹路径"替换为包含要拼接为视频的多图片的文件夹路径,并将"视频输出路径/视频名字.mp4"替换为期望输出的视频路径和名称。运行代码后,即可生成拼接后的视频。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值