python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python图片数据增强

python实现图片数据增强的示例详解

作者:学地理的小胖砸

这篇文章主要为大家详细介绍了python实现图片数据增强的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起了解一下

1.本地有一个face.txt文档,里面是50条url图片链接。帮我写一段python做一下数据增强,额外再生成200张。

首先,您需要确保已经安装了必要的Python库,如 requests 和 PIL,用于下载和处理图像。如果尚未安装,可以使用以下命令进行安装:

pip install requests pillow

下面是一个Python脚本的例子,该脚本会从 face.txt 中读取URL,下载图片,并对图片进行简单的数据增强(这里只做了水平和垂直翻转作为示例)。请注意,这只是一个基础的示例,并未包含所有可能的数据增强方法。

import requests
from PIL import Image
from PIL import ImageOps
import random
import os

# 假设face.txt中的URL每行一个
urls = open('face.txt', 'r').readlines()
urls = [url.strip() for url in urls]  # 去除每行的换行符

base_dir = 'augmented_images'  # 存储增强图片的目录
if not os.path.exists(base_dir):
    os.makedirs(base_dir)

for url in urls:
    response = requests.get(url, stream=True)
    if response.status_code == 200:
        img = Image.open(response.raw)
        
        # 水平翻转
        img_flip_horizontal = img.transpose(Image.FLIP_LEFT_RIGHT)
        img_flip_horizontal.save(os.path.join(base_dir, 'horizontal_flip_' + os.path.basename(url)))
        
        # 垂直翻转
        img_flip_vertical = img.transpose(Image.FLIP_TOP_BOTTOM)
        img_flip_vertical.save(os.path.join(base_dir, 'vertical_flip_' + os.path.basename(url)))

这个脚本会读取 face.txt 中的每个URL,下载对应的图片,然后生成水平和垂直翻转的版本,并保存在 augmented_images 目录中。这样,对于原始的50张图片,您会得到额外的100张增强图片。

请注意,这只是一种非常基础的数据增强方式。在实际的项目中,您可能需要更复杂和多样的数据增强方式,例如旋转、裁剪、色彩调整等。您可以查阅 PIL 或其他图像处理库的文档,以获取更多关于数据增强的方法。

2.更多下载和增强图像的示例代码

以下是一个更复杂的示例,它使用了opencv库进行更多样的图像增强:

首先确保已经安装了所需的库:

pip install opencv-python requests

然后运行以下代码:

import cv2
import requests
import numpy as np
import os

urls = open('face.txt', 'r').readlines()
urls = [url.strip() for url in urls]

base_dir = 'augmented_images'
if not os.path.exists(base_dir):
    os.makedirs(base_dir)

# 定义一些图像增强的函数
def random_brightness(image):
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    rand = np.random.uniform(0.5, 1.5)
    hsv[:,:,2] = np.clip(hsv[:,:,2]*rand, 0, 255)
    return cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

def random_contrast(image):
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    rand = np.random.uniform(0.5, 1.5)
    hsv[:,:,1] = np.clip(hsv[:,:,1]*rand, 0, 255)
    return cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

for url in urls:
    response = requests.get(url, stream=True)
    if response.status_code == 200:
        img = cv2.imdecode(np.fromstring(response.content, np.uint8), cv2.IMREAD_COLOR)
        
        # 水平翻转
        img_flip_horizontal = cv2.flip(img, 1)
        cv2.imwrite(os.path.join(base_dir, 'horizontal_flip_' + os.path.basename(url)), img_flip_horizontal)
        
        # 垂直翻转
        img_flip_vertical = cv2.flip(img, 0)
        cv2.imwrite(os.path.join(base_dir, 'vertical_flip_' + os.path.basename(url)), img_flip_vertical)
        
        # 随机亮度和对比度调整
        img_brightness = random_brightness(img)
        cv2.imwrite(os.path.join(base_dir, 'brightness_' + os.path.basename(url)), img_brightness)
        
        img_contrast = random_contrast(img)
        cv2.imwrite(os.path.join(base_dir, 'contrast_' + os.path.basename(url)), img_contrast)

这个示例代码包含了水平翻转、垂直翻转、随机亮度和对比度调整的数据增强方式。对于原始的50张图片,您将得到额外的200张增强图片。您可以根据需要添加更多的增强方式。

3.代码中的随机亮度和对比度调整的实现

代码中的随机亮度和对比度调整是通过OpenCV库实现的。具体来说,代码中定义了两个函数random_brightness和random_contrast来分别调整图像的亮度和对比度。

random_brightness函数首先将图像从BGR颜色空间转换为HSV颜色空间,然后随机调整图像的亮度通道(V通道),最后将调整后的图像再转换回BGR颜色空间。

random_contrast函数类似地首先将图像转换为HSV颜色空间,然后随机调整图像的饱和度通道(S通道),最后将调整后的图像转换回BGR颜色空间。

这两个函数中的调整因子rand是一个介于0.5和1.5之间的随机数,用于控制调整的程度。通过乘以这个调整因子,可以实现随机地增加或减少图像的亮度和对比度。

这些调整可以产生多样化的图像效果,从而扩充数据集并提高模型的泛化能力。

4.介绍一些其他图像处理库

当然可以,以下是一些其他的图像处理库:

a. Pillow

Pillow是Python中最常用的图像处理库之一,它提供了广泛的图像处理功能,包括图像缩放、裁剪、旋转、颜色转换等。Pillow还支持多种图像格式,并提供了丰富的API和文档。

b. Scikit-image

Scikit-image是一个基于Python的图像处理库,它提供了各种图像处理和计算机视觉算法,包括图像分割、特征提取、形态学处理等。Scikit-image的接口简洁明了,易于使用,同时提供了丰富的示例和文档。

c. OpenCV-Python

OpenCV是一个广泛使用的计算机视觉库,它提供了各种图像处理和计算机视觉算法,包括目标检测、人脸识别、图像分割等。OpenCV-Python是OpenCV的Python接口,它使得使用OpenCV变得更加简单和方便。

这些库都提供了丰富的功能和文档,可以根据具体的需求选择适合的库。

5.其他哪些图像格式

除了上述提到的图像格式外,还有许多其他的图像格式。以下是一些常见的图像格式:

a. TIFF(Tagged Image File Format)

TIFF是一种灵活的、自适应的文件格式,通常用于存储包括照片和艺术作品在内的图像。它支持多种色彩深度和压缩选项。

b. RAW

RAW格式是未经处理、直接从相机传感器读取的图像数据。它通常具有更高的色彩深度和动态范围,但需要特定的软件进行处理和编辑。

c. PSD

PSD是Adobe Photoshop的源文件格式,它支持多图层、通道和其他复杂的图像处理特性。

以上仅是一些常见的图像格式,实际上还有许多其他的专业或特定用途的图像格式。

6.其他相关问题

a.Pillow支持哪些图像格式

Pillow支持多种图像格式,包括但不限于JPEG、PNG、GIF、BMP、TIFF等。具体支持哪些格式,取决于Pillow库的安装和配置,以及操作系统和依赖库的支持情况。可以通过Pillow的官方文档或源代码,查看支持的具体图像格式列表。

b.Scikit-image支持哪些图像格式

Scikit-image支持常见的图像格式,如JPEG、PNG、GIF、BMP等。具体支持哪些格式取决于Pillow库的安装和配置,因为Scikit-image依赖于Pillow来处理图像文件。因此,只要Pillow库支持的图像格式,Scikit-image也能够处理。

c.Pillow支持哪些图像格式

OpenCV-Python支持多种图像格式,包括但不限于JPEG、PNG、JPG、BMP、GIF、TIFF等。基本上常见的图像格式,OpenCV-Python都能够处理。具体支持哪些格式,取决于OpenCV库的安装和配置,以及操作系统和依赖库的支持情况。可以通过OpenCV的官方文档或源代码,查看支持的具体图像格式列表。

7.scikit-image支持的图像格式有哪些区别

scikit-image支持的图像格式主要取决于其所依赖的图像处理库Pillow。Pillow支持多种常见的图像格式,如JPEG、PNG、GIF、BMP等。这些格式之间的主要区别在于它们的压缩方式、支持的颜色模式、透明度等特性。具体使用哪种格式取决于具体的需求和场景。比如,JPEG适合用于存储彩色或灰度图像,支持较高的压缩比;PNG支持透明度,适合用于存储需要背景透明的图像;GIF支持动画,适合用于存储动态图像。

到此这篇关于python实现图片数据增强的示例详解的文章就介绍到这了,更多相关python图片数据增强内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文