清风大佬说:jpg是有损压缩格式 对检测分割的结果有一定影响,所以还是用png的比较好
可参见我的另一篇博客:深度学习中图像格式选用jpg还是png?答:png
import os
import cv2
def transform(input_path, output_path):
if not os.path.exists(output_path): # 输出文件见不存在则创建
os.makedirs(output_path)
for root, dirs, files in os.walk(input_path):
for name in files:
file = os.path.join(root, name)
print('transform' + name)
im = cv2.imread(file)
if output_path:
cv2.imwrite(os.path.join(output_path, name.replace('jpg', 'png')), im)
else:
cv2.imwrite(file.replace('jpg', 'png'), im)
if __name__ == '__main__':
input_path = input("请输入目标文件夹: ")
output_path = input("请输入输出文件夹: (回车则输出到原地址)")
if not os.path.exists(input_path):
print("文件夹不存在!")
else:
print("Start to transform!")
transform(input_path, output_path)
print("Transform end!")
更新一下代码,下面这个代码是我博文深度学习中图像格式选用jpg还是png?答:png中的,我选择采用PIL.Image
来转成png格式(本篇博客是采用的cv2,cv2转的png格式可能会比原图大出很多来)
import os
import shutil
import cv2
from PIL import Image, ImageOps
def transform(input_dir, output_dir):
if not os.path.exists(output_dir): # 输出文件见不存在则创建
os.makedirs(output_dir)
for root, dirs, files in os.walk(input_dir):
for file in files: # 只对文件进行更改
filepath = os.path.join(root, file)
filename, ext = os.path.splitext(file) # 分割出图像名称、后缀
if ext != '.png': # 如果后缀不是png,则进行转换
newfile = filename + '.png' # 后缀改为png
print('transform ' + file)
# -------------cv2 更改为PNG的方式------------------------------- #
# image = cv2.imread(filepath)
# cv2.imwrite(os.path.join(output_dir, newfile), image)
# -------------PIL更改为PNG的方式 图像大小比cv的低----------------- #
image = Image.open(filepath)
image = ImageOps.exif_transpose(image) # 消除相机的exif信息
image.save(os.path.join(output_dir, newfile))
else: # 直接拷贝过去
shutil.copy(filepath, os.path.join(output_dir, file))
if __name__ == '__main__':
input_dir = 'images' # 目标文件夹
output_dir = 'images_2' # 输出文件夹
if not os.path.exists(input_dir):
print("文件夹不存在!")
else:
print("Start to transform!")
transform(input_dir, output_dir)
print("Transform end!")