当前位置:   article > 正文

利用 python opencv 批量图片进行裁剪_python+opencv进行批量裁剪图片

python+opencv进行批量裁剪图片
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from utils.utils import Directory_Hanlder # Directory_Hanlder代码链接:https://blog.csdn.net/qq_16555103/article/details/107146429
  4. import os
  5. import time
  6. import re
  7. from tqdm import tqdm
  8. import cv2
  9. import numpy as np
  10. import argparse
  11. # 读取带有中文路径的图片
  12. def cn_imread(filePath):
  13. try:
  14. cv_img = cv2.imdecode(np.fromfile(filePath, dtype=np.uint8), cv2.IMREAD_COLOR)
  15. """
  16. cv2.imdecode 参数与 cv2.imread 打开的图片相似,如果不需要第四通道,选择 cv2.IMREAD_COLOR,此时读取图片的格式为 bgr
  17. cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。
  18. cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。
  19. cv2.IMREAD_UNCHANGED:包括alpha,可以直接写-1
  20. """
  21. except Exception as e:
  22. print('当前图片opencv无法读取,原因为:\n{}'.format(e))
  23. cv_img = None
  24. return cv_img
  25. # 保存带有中文路径的图片
  26. def cn_imwrite(file_path , img_array):
  27. # 这个方法需要特别注意,img_array一定是一个BGR格式的uint8 ndarray
  28. cv2.imencode('.jpg', img_array)[1].tofile(file_path)
  29. def single_img_save(img_array,report_path,img_name):
  30. """
  31. 输入 img BGR格式的数组,保存图片【.jpg】到指定路径
  32. :param img_array:
  33. :return:
  34. """
  35. img_path = os.path.join(report_path,img_name)
  36. cn_imwrite(img_path,img_array)
  37. # cv2.imwrite(img_path, img_array)
  38. def single_img_intercept(fpath,top=0.0,battle=0.125):
  39. """
  40. 给定一张需要剪切的图片的路径 与 图片上下需要剪切的比例
  41. :param fpath: 图片的路径
  42. :param top: 图片上侧的比例
  43. :param battle: 图片下侧的比例
  44. :return:
  45. """
  46. img = cn_imread(fpath)
  47. if img is None:
  48. return None
  49. img_shape = img.shape
  50. height,weight = img_shape[0],img_shape[1]
  51. height_start = int(np.floor(top*height))
  52. height_end = int(-1 * np.floor(battle*height))
  53. img = img[height_start:height_end]
  54. return img
  55. if __name__ == '__main__':
  56. # 创建对象
  57. parser = argparse.ArgumentParser()
  58. # 添加参数
  59. parser.add_argument('--Dir', help='source dir',type=str)
  60. parser.add_argument('--top', help='top value',type=float)
  61. parser.add_argument('--battle', help='battle value',type=float)
  62. # 使用parse_args解析参数
  63. args = parser.parse_args()
  64. dir_ = args.Dir
  65. top = args.top
  66. battle = args.battle
  67. # 构建路径
  68. source_dir = dir_
  69. report_dir_path = os.path.join(source_dir, 'report_img')
  70. Directory_Hanlder.check_directory(report_dir_path)
  71. Directory_Hanlder.clean_directory(report_dir_path)
  72. # 遍历文件夹下所有的文件
  73. files_path, dirs_path = Directory_Hanlder.list_dir_all_files(source_dir)
  74. # 重写图片名
  75. for idx,img in tqdm(enumerate(files_path)):
  76. # 将指定的文件img复制到report_dir_path的文件夹里面
  77. img_array = single_img_intercept(img,top=top,battle=battle)
  78. if img_array is None:
  79. continue
  80. img_name = img.split('\\')[-1]
  81. # 保存
  82. single_img_save(img_array,report_dir_path,img_name)

参考:OpenCV—Python 图像指定区域裁剪

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/77416
推荐阅读
相关标签
  

闽ICP备14008679号