Python(一)Python+OpenCV写的程序,用于批量裁剪图片

Python+OpenCV写的程序,用于批量裁剪图片

本人在最近学习网络在线课程的过程中,为了方便课后复习,使用手机截取了大量的图片,但截取的图片文件大占内存,且有左右的黑色无信息区域。想将这些图片打印出来作为课件留存,但左右的黑色区域不仅会耗费大量打印油墨,而且打印出来不美观。我在网上找程序解决我的问题,得到的代码都不能达到简洁且高效的目的。

因此我自己写了一个Python程序使用OpenCV库的简单函数实现了对大量图片进行批量截图,截取需要的部分并保存:

大量图片待处理:
大量图片待处理

我选取了其中一张图片做示范:

程序裁剪之前的原图:
裁剪之前的图片
针对上图需要将两边的黑色区域去除掉,将有用区域裁剪出来:

程序1:
import cv2
import os 

"""先保存文件名到test.txt,再按行读取读取文件名,并进行操作"""
f = open("test.txt",'w')
for root,dirs,files in os.walk("kaochong", True):      # 遍历检索根、目录、文件
	for file in files:                                 # 文件遍历
		f.writelines("kaochong\\" + file)              # 按行写入文件名
		f.write('\n')                                  # 后面给个\n
f = open("test.txt",'r')
for i in range(1,107):                                 # 106个文件
     line = f.readline()                               # 读一行
     line = line.strip('\n')                           # 去掉\n
     #print(line)
     image = cv2.imread(line)                          # 读取文件名对应的图片
     # cropImg = image[0:1080:2, 240:1680:2]           # 先y范围,后x范围,每个的第三个为采样步长
     cropImg = image[0:1080, 240:1680]                 # 裁剪
     cv2.imwrite("kaochong1\\" + line[20:39] + ".png", cropImg)       # 保存
f.close()

# print(image.shape)
# cv2.imshow("image", image)
# print(cropImg.shape)
# cv2.imshow("cropImg", cropImg)
# cv2.waitKey(0)
程序2:
import cv2
import os 

"""简化版,读到文件名之后不保存,立即进行操作"""
for root,dirs,files in os.walk("kaochong", True):           # 遍历检索根、目录、文件
	for file in files:                                      # 文件遍历
          line = "kaochong\\" + file
          #print(line)
          image = cv2.imread(line)                          # 读取文件名对应的图片
          # cropImg = image[0:1080:2, 240:1680:2]           # 先y范围,后x范围,每个的第三个为采样步长
          cropImg = image[0:1080, 240:1680]                 # 裁剪
          cv2.imwrite("kaochong1\\" + line[20:39] + ".png", cropImg)       # 保存

经过程序批量处理后,去除了黑色区域,得到了裁剪后有的图片:
批量裁剪后的图片
裁剪后的示范图片:
裁剪后的图片

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用OpenCV进行批量处理图片Python代码如下: ``` python import cv2 import os # 图片所在的文件夹路径 image_folder = 'path/to/folder' # 待处理的图片文件格式 image_format = '.jpg' # 处理后保存的文件夹路径 output_folder = 'path/to/output/folder' # 遍历文件夹中所有的图片 for filename in os.listdir(image_folder): if filename.endswith(image_format): # 读取图片 image = cv2.imread(os.path.join(image_folder, filename)) # 在这里进行对图片的处理 # 保存处理后的图片 output_filename = os.path.splitext(filename)[0] + '_processed' + image_format output_path = os.path.join(output_folder, output_filename) cv2.imwrite(output_path, image) ``` 你可以根据需要修改image_folder、image_format和output_folder的值,以及在循环中添加你需要对图片进行的操作。最后将处理后的图片保存到指定的文件夹中。 ### 回答2: 要使用OpenCV进行批量处理图片,可以按照以下步骤进行: 1. 导入OpenCV库:在Python程序中导入OpenCV库,可以使用`import cv2`语句。 2. 获取图片路径:使用Python的文件操作函数(例如os模块或glob模块),获取待处理图片的路径。可以是一个文件夹中的多张图片,或者一个包含图片路径的列表。 3. 循环处理每张图片:使用循环语句遍历每张图片的路径。 4. 读取图片:使用`cv2.imread()`函数读取图片。该函数接受图片路径作为参数,并返回一个表示图片的numpy数组。 5. 执行图像处理操作:对读取的图片进行各种处理操作。可以使用OpenCV提供的函数和方法,如图像缩放、图像旋转、颜色转换等。 6. 保存处理后的图片:使用`cv2.imwrite()`函数将处理后的图片保存到指定路径。该函数接受保存路径和处理后的图片数组作为参数。 7. 释放资源:在循环结束后,使用`cv2.destroyAllWindows()`函数关闭窗口及释放资源。 下面是一个示例代码片段,演示了如何使用OpenCV进行批量处理图片: ```python import cv2 import glob # 获取图片路径 image_paths = glob.glob("path/to/images/*.jpg") # 循环处理每张图片 for image_path in image_paths: # 读取图片 image = cv2.imread(image_path) # 执行图像处理操作,例如缩放为指定大小 resized_image = cv2.resize(image, (300, 300)) # 保存处理后的图片 save_path = "path/to/save/processed_images/" + image_path.split("/")[-1] cv2.imwrite(save_path, resized_image) # 释放资源 cv2.destroyAllWindows() ``` 这是一个简单的示例,你可以根据具体需求和处理操作进行更多定制和扩展。 ### 回答3: 使用OpenCV库可以方便地批量处理图片,特别是在Python中使用。 首先,我们需要导入OpenCV库和其他相关的库,如numpy等。 接下来,我们可以使用cv2.imread()函数读取要处理的图片文件。这个函数可以读取多种图片格式,如bmp、jpg、png等。读取的图片数据会存储在一个numpy数组中。 然后,我们可以对图片进行各种处理操作,如调整大小、裁剪、旋转、灰度化、二值化等。这些操作可以通过调用OpenCV提供的相应函数来实现。 例如,我们可以通过cv2.resize()函数调整图片的尺寸,通过cv2.cvtColor()函数将图片转换为灰度图像,通过cv2.threshold()函数进行图像二值化等。 如果要对多张图片进行批量处理,可以使用循环来遍历每一张图片,对每张图片进行相同或不同的操作。 最后,我们可以使用cv2.imwrite()函数将处理后的图片保存到指定的位置。 综上所述,通过OpenCV以及Python的强大功能,我们可以轻松地对多张图片进行批量处理,实现各种各样的操作,如调整尺寸、颜色转换、特征提取等。这对于进行图像处理、机器视觉、深度学习等应用非常有用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值