python批量修改图片尺寸(含多个文件夹)

先看看文件夹组成
在这里插入图片描述
可以直接套用一下代码,不难理解

# -*- coding: utf-8 -*-
"""
Created on Mon May 25 09:27:27 2020

@author: 吴
"""

# -*- coding: utf-8 -*-
import cv2
import matplotlib.pyplot as plt
import os
import re
import sys
from PIL import Image
import string
import numpy as np

PATH = 'testImage'   #这里路径自己定,注意要是直接从我的电脑复制路径要加 r'****'
#我这里是相对路径,亲测中文路径也可以


def resizeImage(file,NoResize):
    
    image = cv2.imread(file,cv2.IMREAD_COLOR)
    
    #如果type(image) == 'NoneType',会报错,导致程序中断,所以这里先跳过这些图片,
    #并记录下来,结束程序后手动修改(删除)
    
    if image is None:
        NoResize += [str(file)]
    else:
        resizeImg = cv2.resize(image,(512,384))
        cv2.imwrite(file,resizeImg)
        cv2.waitKey(100)

def resizeAll(root):
    
    #待修改文件夹
    fileList = os.listdir(root)
    #输出文件夹中包含的文件        
    # print("修改前:"+str(fileList))
    #得到进程当前工作目录
    currentpath = os.getcwd()   
    #将当前工作目录修改为待修改文件夹的位置    
    os.chdir(root)
    
    NoResize = []  #记录没被修改的图片
    
    for file in fileList:       #遍历文件夹中所有文件
        file = str(file)
        resizeImage(file,NoResize)
         
    print("---------------------------------------------------")
    
    os.chdir(currentpath)       #改回程序运行前的工作目录
    
    sys.stdin.flush()       #刷新
    

    
    
    print('没别修改的图片: ',NoResize)

if __name__=="__main__":
    #子文件夹
    for childPATH in os.listdir(PATH):
        #子文件夹路径
        childPATH = PATH + '/'+ str(childPATH)
        # print(childPATH)
        resizeAll(childPATH)
    print('------修改图片大小全部完成-_-')
    



如果报错类似

OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:3720: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'

有很多因素导致的,解决方法也有很多,比如重装opencv,获得WIN10最高全选等,但这些我试了没走通,所以以下只是我个人的方法-_-

1.路径问题----
以上代码中
PATH 含有中文,opencv有时候会报错,所以将文件夹名字改成英文即可
注意:子文件夹也要改!

例如:
我把这个文件夹放到代码所在文件夹,就可以用相对路径了,
在这里插入图片描述

PATH = 'testImage'

OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:3720: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize’

关于这个报错我问题,我整了一天都没搞定,最后找了个妥协的方法:
就是这段代码

def resizeImage(file,NoResize):
    
    image = cv2.imread(file,cv2.IMREAD_COLOR)
    
    #如果type(image) == 'NoneType',会报错,导致程序中断,所以这里先跳过这些图片,
    #并记录下来,结束程序后手动修改(删除)
    
    if image is None:
        NoResize += [str(file)]
    else:
        resizeImg = cv2.resize(image,(512,384))
        cv2.imwrite(file,resizeImg)
        cv2.waitKey(100)

出现这个报错的原因就是我某些图片的属性是NoneType
可以试一下以下代码

print(type(image))
# 如果打印出  <class NoneType>
#说明你的问题和我一样,直接套用我上面代码,打印出没别修改的图片再手动删除即可

---------更新---------------
一个python程序解决[更改图片名称_转换图片成JPG格式_修改图片尺寸]

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值