OpenCV-Python实战(8) —— OpenCV 实现批量将 bmp、png、jpg格式图片转换为 png 格式图片

1. 需求分析

  1. 要求批量处理,因此考虑将所有的需要处理的文件放到一个文件夹下;
  2. 文件夹下可能不止需要处理的文件,因此通过文件后缀对文件进行筛选;
  3. 图片格式转换的处理方法有很多,本文采用 opencv 来进行图片的格式转换。

2. 实现效果

3. 需求实现

  1. 使用 os 模块来读取需要处理文件夹里的全部文件名称;
  2. 转换后的 png 格式图片需要新建一个 png 文件夹,保存转换后的 png 图片;
  3. 获取文件后缀,判断是否是需要转换的文件格式;
  4. 使用 cv.imread 和 cv.imwrite 进行格式转换:OpenCV-Python学习(2)—— OpenCV 图像的读取、显示和保存(cv.imread、cv.imshow、cv.imwrite)

4. 图片转换

  1. 循环文件名称;
  2. 以【.】进行切割,获取文件名和文件后缀;
  3. 判断文件后缀,是否在转换需求文件中;
  4. 是需要转换的文件,根据文件名,使用 cv.imread 读取图片 OpenCV-Python学习(2)—— OpenCV 图像的读取、显示和保存(cv.imread、cv.imshow、cv.imwrite)
  5. 使用 cv.imwrite 保存文件,同时修改文件后缀为 png,OpenCV-Python学习(2)—— OpenCV 图像的读取、显示和保存(cv.imread、cv.imshow、cv.imwrite)
# 图片转换
def handleImage(names):
  for name in names:
    suffixs = name.split('.')
    suffix = suffixs.pop()
    if suffix in ['bmp','png','jpg']:
      img = cv.imread(f'./images/{name}')
      cv.imwrite(f'./png/{suffixs[0]}.png', img)
      print(f'================={suffixs[0]}转换成功==================')

5. 完整代码

"""
@Author  :Rattenking
@Date    :2023/03/24 10:27
@CSDN	 :https://blog.csdn.net/m0_38082783
"""

import os
import time
import cv2 as cv

filePath = os.path.dirname(os.path.abspath(__file__))

# 获取当前文件夹下的文件名列表
def readname():
  names = None
  try:
    names = os.listdir(f'{filePath}/images/')
  except Exception as e:
    print(e)
    print('获取文件名列表失败!')
  else:
    print('获取文件名列表成功!')
    return names

# 图片转换
def handleImage(names):
  for name in names:
    suffixs = name.split('.')
    suffix = suffixs.pop()
    if suffix in ['bmp','png','jpg']:
      img = cv.imread(f'./images/{name}')
      cv.imwrite(f'./png/{suffixs[0]}.png', img)
      print(f'================={suffixs[0]}转换成功==================')

# 转换所用时间的计算
def loopHandleFile():
  start = time.time()
  startTime = int(round(start * 1000))
  names = readname()
  try:
    if not os.path.exists(f'./png/'):
      os.makedirs(f'./png/')
    handleImage(names)
  except Exception as e:
    print(e)
    print('批量转换图片失败!')
  else:
    print('批量转换图片成功!')
    end = time.time()
    endTime = int(round(end * 1000))
    print('本次转换用时:' + str(endTime - startTime) + ' ms')

if __name__ == "__main__":
  loopHandleFile()

猜你喜欢

转载自blog.csdn.net/m0_38082783/article/details/129799568