Python基于TensorFlow的图像处理操作详解

Theo
Theo
发布时间:2026-10-13| 3人浏览过
原创

本文详细介绍Python中基于TensorFlow的图像处理技术。涵盖图像解码显示、缩放(双线性/最近邻等)、裁剪与填充、随机裁剪、上下左右翻转以及对比度、明度和饱和度调整。重点解析VGG网络输入数据的批处理拆分与重组流程,帮助提升深度学习模型识别准确率。

本文分享一个基于Python和TensorFlow的图像处理示例,供读者参考学习。

在深度学习任务中,若原始图片数量不足或希望模型进行更充分的训练,可通过处理现有图片生成新数据。这种数据增强手段有助于提升网络识别的准确率。

1、图像解码与显示

利用matplotlib库可在Jupyter环境中便捷地绘制和输出图片。首先通过tf.gfile打开图片文件,并使用tf.image.decode_jpeg将JPEG图片解码为三维矩阵,随后即可通过matplotlib绘制并显示图片信息。


import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
 
#读取图像文件
image_raw=tf.gfile.GFile('D:\Temp\MachineLearning\data\cat.jpeg','rb').read()
 
with tf.Session() as sess:
  #对jpeg图像解码得到图像的三位矩阵数据
  image_data=tf.image.decode_jpeg(image_raw)
  print(image_data.eval())
  plt.imshow(image_data.eval())
  plt.show()

运行结果将打印出图片的三维矩阵数据,并展示解码后的图片视觉效果。

                            

2、图像缩放

TensorFlow内置了多种图像处理函数,例如resize_image用于调整图片尺寸。该函数第一个参数为图片数据源,第二个参数指定缩放后的尺寸,第三个参数method指定缩放算法:默认值0为双线性插值法,1为最近邻插值法,2为双立方插值法,3为像素区域插值法。


  #对图片大小进行缩放
  image_resize=tf.image.resize_images(image_data,[500,500],method=0)
  #tensorflow处理后的图片是float32格式的,需要转化为uint8才能正确输出
  image_resize=np.asarray(image_resize.eval(),dtype='uint8')
  plt.imshow(image_resize)
  plt.show()

3、图像裁切

函数tf.image.resize_image_with_crop_or_pad可在保持图片原始比例的前提下,对图片进行裁切或填充操作。

函数tf.image.random_crop用于随机选取区域进行裁剪,而非固定从中心位置裁剪。


  #图片裁剪
  image_crop=tf.image.resize_image_with_crop_or_pad(image_data,500,500)
  plt.imshow(image_crop.eval())
  plt.show()
  #随机裁剪
  img_random=tf.image.random_crop(image_data,[300,300,3])
  plt.imshow(img_random.eval())
  plt.show()

                              

resize_image_with_crop_or_pad函数的第一个参数为图片资源,后两个参数指定裁切后的目标尺寸。若原始图片大于目标值,则裁去多余部分;若小于目标值,则用黑色填充。例如,上述示例中图片左右被裁剪,上下以黑色填充。

random_crop函数的第一个参数为图片资源,第二个参数为表示目标图像尺寸的三维张量。

4、图像翻转

通过相关函数可实现图片的上下及左右翻转。在模型训练阶段,可将原始样本图片进行翻转处理,作为新的特征值输入模型,从而丰富训练数据。


  #上下翻转
  img_down=tf.image.flip_up_down(image_data)
  plt.imshow(img_down.eval())
  plt.show()
  
  #左右翻转
  img_left=tf.image.flip_left_right(image_data)
  plt.imshow(img_left.eval())
  plt.show()

5、调整对比度、明度与饱和度

通过tf.image.adjust_contrast可调整图像对比度:参数大于1表示加深,小于1表示减淡。

tf.image.random_contrast可在指定范围内随机调整对比度。

类似地,adjust_brightness、adjust_saturation和adjust_hue分别用于调整明度、饱和度和色相。


  #加深对比度
  img_deep=tf.image.adjust_contrast(image_data,2)
  plt.imshow(img_deep.eval())
  plt.show()
  #降低对比度
  img_fade=tf.image.adjust_contrast(image_data,0.5)
  plt.imshow(img_fade.eval())
  plt.show()
  #随机对比度
  img_contrast=tf.image.random_contrast(image_data,0.5,2)
  plt.imshow(img_contrast.eval())
  plt.show()

6、VGG网络输入图片处理

VGG网络训练时传入的图片参数x_img是以batch_size为单位的四维数据。例如,传入20张32×32的3通道图片,其数据形状为[20,32,32,3]。然而,TensorFlow的图片处理函数仅能处理三维的单张图片。因此,需首先通过split()函数将20张图片拆分为单张[1,32,32,3],再通过reshape()函数转化为三维数据[32,32,3]。接着调用图片处理函数对单张图片进行处理,将处理后的图片恢复为四维格式,并放入数组res_arr中,最终拼接成原来的一组20×32×32×3的数据。


# 将一批batch_size张图片在第一维上切分为单张图片
img_arr=tf.split(x_img,batch_size,axis=0)
res_arr=[]
# 遍历每个图片对其进行处理
for img in img_arr:
  # 将单张四维的图片[1,32,32,3]处理成三维[32,32,3]
  img=tf.reshape(img,[32,32,3])
  # 对单张图片进行图像增强
  img_flip=tf.image.random_flip_left_right(img)   # 翻转图片
  img_bright=tf.image.random_brightness(img_flip,max_delta=63)  # 随机调整亮度
  img_contrast=tf.image.random_contrast(img_bright,lower=0.2, upper=1.8) # 调整对比度
  # 将增强后的图片再变回原来的四维格式
  img=tf.reshape(img_contrast,[1,32,32,3])
  # 将每个处理后的图片放在一个数组
  res_arr.append(img)
# 将处理后的单个图片重新拼接在一起  
img_aug=tf.concat(res_arr,axis=0)

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》。

希望本文所述内容对大家学习Python程序设计有所帮助。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。