先看看文件夹组成
可以直接套用一下代码,不难理解
# -*- 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>
#说明你的问题和我一样,直接套用我上面代码,打印出没别修改的图片再手动删除即可