当前位置:   article > 正文

数据增强代码

数据增强代码

实现功能:

                1、随机亮度

                2、随机裁剪

                3、椒盐噪声

                4、高斯噪声

                5、平移

                6、选装

  1. from PIL import Image, ImageEnhance
  2. import random
  3. import numpy as np
  4. def random_brightness_enhance_and_save(image_path, output_path):
  5. """
  6. 随机亮度增强函数,并保存增强后的图像,在保存前转换图像模式为RGB。
  7. 参数:
  8. image_path: 输入图像的路径。
  9. output_path: 增强后图像的保存路径。
  10. """
  11. # 打开图像
  12. img = Image.open(image_path)
  13. # 生成随机亮度增强因子,范围从0.51.5
  14. enhancer_factor = random.uniform(1.4, 1.5)
  15. # 创建一个亮度增强器
  16. enhancer = ImageEnhance.Brightness(img)
  17. # 应用增强因子
  18. img_enhanced = enhancer.enhance(enhancer_factor)
  19. # 如果图像模式是RGBA,则转换为RGB
  20. if img_enhanced.mode == 'RGBA':
  21. img_enhanced = img_enhanced.convert('RGB')
  22. # 保存增强后的图像
  23. img_enhanced.save(output_path)
  24. def add_salt_and_pepper_noise(image_path, output_path, noise_ratio=0.02):
  25. """
  26. 给图像添加椒盐噪声并保存。
  27. 参数:
  28. image_path: 输入图像的路径。
  29. output_path: 增强后图像的保存路径。
  30. noise_ratio: 噪声比例,默认为0.02。
  31. """
  32. # 打开图像
  33. img = Image.open(image_path)
  34. img = img.convert('RGB') # 确保图像是RGB模式
  35. # 获取图像数据
  36. pixels = img.load()
  37. for i in range(img.size[0]): # 对于所有的x
  38. for j in range(img.size[1]): # 对于所有的y
  39. r = random.random() # 生成一个随机数
  40. if r < noise_ratio / 2:
  41. # 将像素值设置为黑色
  42. # pixels[i, j] = (0, 0, 0)
  43. pass
  44. elif r < noise_ratio:
  45. # 将像素值设置为白色
  46. pixels[i, j] = (255, 255, 255)
  47. # 保存增强后的图像
  48. img.save(output_path)
  49. def add_gaussian_noise(image_path, output_path, mean=0, sigma=25):
  50. """
  51. 给图像添加高斯噪声并保存。
  52. 参数:
  53. image_path: 输入图像的路径。
  54. output_path: 增强后图像的保存路径。
  55. mean: 高斯噪声的均值,默认为0。
  56. sigma: 高斯噪声的标准差,默认为25。
  57. """
  58. # 打开图像并转换为数组
  59. img = Image.open(image_path)
  60. img = img.convert('RGB') # 确保图像是RGB模式
  61. img_arr = np.array(img)
  62. # 生成高斯噪声
  63. noise = np.random.normal(mean, sigma, img_arr.shape)
  64. # 将噪声添加到图像数组
  65. noisy_img_arr = img_arr + noise
  66. # 确保结果仍然在合法的像素范围内
  67. noisy_img_arr_clipped = np.clip(noisy_img_arr, 0, 255)
  68. # 将结果数组转换回图像
  69. noisy_img = Image.fromarray(noisy_img_arr_clipped.astype('uint8'), 'RGB')
  70. # 保存增强后的图像
  71. noisy_img.save(output_path)
  72. def translate_image(image_path, output_path, translate_x, translate_y):
  73. """
  74. 对图像进行平移并保存。
  75. 参数:
  76. image_path: 输入图像的路径。
  77. output_path: 处理后图像的保存路径。
  78. translate_x: 水平方向上的平移距离,正值向右平移,负值向左平移。
  79. translate_y: 垂直方向上的平移距离,正值向下平移,负值向上平移。
  80. """
  81. img = Image.open(image_path)
  82. # 创建平移变换矩阵
  83. translation_matrix = (1, 0, translate_x, 0, 1, translate_y)
  84. # 应用平移变换
  85. translated_img = img.transform(img.size, Image.AFFINE, translation_matrix)
  86. # 如果图像模式是RGBA,则转换为RGB
  87. if translated_img.mode == 'RGBA':
  88. translated_img = translated_img.convert('RGB')
  89. # 保存处理后的图像
  90. translated_img.save(output_path)
  91. def rotate_image(image_path, output_path, angle, expand=True):
  92. """
  93. 对图像进行旋转并保存。
  94. 参数:
  95. image_path: 输入图像的路径。
  96. output_path: 处理后图像的保存路径。
  97. angle: 旋转角度,正值表示逆时针旋转,负值表示顺时针旋转。
  98. expand: 是否扩展图像的大小以适应整个旋转后的图像,默认为True。
  99. """
  100. img = Image.open(image_path)
  101. # 应用旋转变换
  102. rotated_img = img.rotate(angle, expand=expand)
  103. # 如果图像模式是RGBA,则转换为RGB
  104. if rotated_img.mode == 'RGBA':
  105. rotated_img = rotated_img.convert('RGB')
  106. # 保存处理后的图像
  107. rotated_img.save(output_path)
  108. # 使用示例
  109. # 假设你有一个名为"example.png"的图像文件(可能包含透明通道),并希望保存增强后的图像为"enhanced_example.jpg"
  110. random_brightness_enhance_and_save("1.jpg", "./random_light.jpg")
  111. # 假设你有一个名为"example.jpg"的图像文件,并希望保存添加椒盐噪声后的图像为"sp_noise_example.jpg"
  112. add_salt_and_pepper_noise("1.jpg", "sp_noise_example.jpg", noise_ratio=0.05)
  113. # 假设你有一个名为"example.jpg"的图像文件,并希望保存添加高斯噪声后的图像为"gaussian_noise_example.jpg"
  114. add_gaussian_noise("1.jpg", "gaussian_noise_example.jpg")
  115. # 使用示例
  116. translate_image("1.jpg", "translated_example.jpg", 50, 30)
  117. # 使用示例
  118. rotate_image("1.jpg", "rotated_example.jpg", 45)

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

闽ICP备14008679号