在Python编程环境中,OpenCV库是一个强大的图像处理和计算机视觉工具。本文主要讲解如何使用OpenCV批量更改图片的尺寸大小。这个过程对于处理大量图片,如图像数据预处理,尤其有用。以下是一些关键知识点: 1. **OpenCV的导入**: 我们需要导入`cv2`模块,它是OpenCV的Python接口,提供了大量的图像处理功能。 ```python import cv2 ``` 2. **调整图片尺寸**: OpenCV提供了`resize()`函数,用于调整图像的大小。但是,在某些情况下,我们可能需要保持图片的纵横比,因此需要先进行适当的填充(padding)。`resize_image()`函数实现了这一功能,它首先检查图片的长宽,然后根据最长边决定需要添加的padding。使用`copyMakeBorder()`函数添加padding,并设置边缘颜色(默认为黑色)。调用`resize()`函数将图片调整到指定的宽度和高度。 ```python def resize_image(image, height, width): # ...计算padding... # 使用copyMakeBorder添加padding constant = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_CONSTANT, value=BLACK) # 调整图像大小 return cv2.resize(constant, (height, width)) ``` 3. **遍历目录和读取图片**: `read__image()`函数遍历指定路径下的所有文件和子目录。`os.listdir()`用于获取目录中的所有文件名,`os.path.abspath()`和`os.path.join()`用于构建完整路径。如果路径是文件夹,函数会递归调用自身;如果是图片文件(例如,以`.JPG`结尾),则读取图片,调用`resize_image()`函数改变尺寸,并使用`imwrite()`保存调整后的图片。 ```python def read__image(path_name): # ...遍历文件夹和图片... image = cv2.imread(full_path) image = resize_image(image) # 保存调整尺寸后的图片 cv2.imwrite(image_name, image) ``` 4. **主函数**: 主函数`if __name__ == '__main__':`确保`read__image()`函数只在当前脚本运行时执行,而不是作为模块导入时执行。 ```python if __name__ == '__main__': read__image('C:/Users/baideguo/dataset/JPEGImages/') ``` 5. **边界类型和填充**: 在`copyMakeBorder()`函数中,`cv2.BORDER_CONSTANT`是边界类型之一,表示使用常数值(在这里是黑色)填充边界。还有其他边界类型,如`cv2.BORDER_REPLICATE`(复制边界像素),`cv2.BORDER_WRAP`(环绕模式)等,可以根据需求选择。 6. **文件命名**: 在保存调整尺寸后的图片时,使用`'%s%d.jpg' % ('resize_image', num)`创建新的文件名,确保每张图片都有唯一的名称,以防止覆盖原文件。 通过上述方法,我们可以有效地利用OpenCV和Python批量处理图片,改变它们的尺寸,这对于图像处理项目,特别是机器学习和深度学习中的数据预处理,是非常实用的。这个过程不仅可以优化存储空间,还可以提高后续处理的速度,因为较小尺寸的图片通常需要更少的计算资源。
- 余青葭2023-07-28这个文件提供了一个简单有效的方法来批量改变图片的尺寸大小,非常实用。
- 雨后的印2023-07-28使用Python和OpenCV,这个文件教会了我如何快速地批量改变图片的大小,非常方便。
- 林书尼2023-07-28我发现这个Python文件能够方便地批量改变图片的大小,非常省时。
- 仙夜子2023-07-28这个文件分享了使用Python和OpenCV来批量处理图片尺寸的方法,很实用。
- 稚气筱筱2023-07-28这个文件提供了一个简单易懂的方法来批量调整图片的尺寸,非常实用。
- 粉丝: 11
- 资源: 903
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助