TensorFlow图片预处理:io.imread与cv2.imread读取差异及resize裁剪详解

慢慢来
慢慢来
发布时间:2026-10-14| 3人浏览过
原创

本文详解TensorFlow中图片预处理的两类常用方法。对比io.imread与cv2.imread在RGB/BGR存储格式上的区别,以及transform.resize与cv2.resize在数值范围(0-1与0-255)和数据类型(float64与uint8)上的差异。结合tfrecord数据集制作场景,提供通道转换与格式转换的具体代码实现,帮助开发者选择合适的数据加载策略。

TensorFlow图片预处理概述

方式一:使用skimage库

方式一:skimage库读取与处理


from skimage import data, io, transform, color 
import matplotlib.pyplot as plt 
 
# io.imread 读出的图片格式是uint8,value是numpy array 类型。
image = data.coffee()
image = io.imread(dir)
 
plt.imshow(image)
plt.show()
 
io.save('1.jpg',image) #保存图像
 
image_gray = color.rgb2gray(image) #转换为灰度图像
io.save('2.jpg',image_gray)
 
# 通过transform.resize()裁剪后的图片是以 float64的格式存储的,数值的取值范围是(0~1)
image_ = transform.resize(image,(200,200))
img = image_ * 255 #将图片的取值范围改成(0~255)
img = img.astype(np.uint8) 
img = image_ * 255 #将图片的取值范围改成(0~255)
img = img.astype(np.uint8) 

方式二:使用cv2库

方式二:cv2库读取与处理


import cv2
import matplotlib.pyplot as plt 
 
# cv2.imread读出的图片格式是uint8,value也是numpy array 类型。
# 图像数据格式是以BGR的格式进行存储的。需要将存储类型改成RGB 的形式才能正常显示原图的颜色。
image=cv2.imread(dir) 
b,g,r = cv2.split(image)  #将图像通道分离开 
rgb_image = cv2.merge([r,g,b]) #以RGB的形式重新组合 
#image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 也可以使用这个函数直接转换成RGB 形式 
plt.imshow(rgb_image) 
 
# 通过cv2.resize()裁剪后的图片还是以 numpy array 的方式保存的, 数值的取值范围是(0~255)
image_cv2 = cv2.resize(rgb_image)
 
image=cv2.imread(dir) 
b,g,r = cv2.split(image)  #将图像通道分离开 
rgb_image = cv2.merge([r,g,b]) #以RGB的形式重新组合 
#image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 也可以使用这个函数直接转换成RGB 形式 
plt.imshow(rgb_image) 

# 通过cv2.resize()裁剪后的图片还是以 numpy array 的方式保存的, 数值的取值范围是(0~255)
image_cv2 = cv2.resize(rgb_image)

补充说明:TensorFlow中io.imread与cv2.imread的读取区别,以及transform.resize与cv2.resize的裁剪差异

在TensorFlow模型训练前,图片预处理是必要环节,其中读取和裁剪是最基础的两个步骤。常见的读取和裁剪方式各有两种,本文将分享这些方式的具体实现及其核心区别。

一、两种常见的图片读取方式:io.imread()与cv2.imread()

1. 使用io.imread()读取的图片格式为uint8,返回值为numpy array类型。对于RGB图像,数据以RGB格式存储。

2. 使用cv2.imread()读取的图片格式同样为uint8,返回值也是numpy array类型。主要区别在于,cv2默认以BGR格式存储图像数据。若需正常显示原图颜色,需将存储类型转换为RGB。特别是在制作tfrecord数据集时,必须确保图片通道为RGB,具体代码参考。

cv2读取与RGB转换示例


import cv2
import matplotlib.pyplot as plt
from skimage import transform 
import numpy as np
import skimage.io as io 
 
train_dir = 'E:/TensorFlow/Project_TF/flower_tfrecord/data/test/roses/timg.jpg'
 
'''以cv2方式读取图片'''
image=cv2.imread(train_dir)
b,g,r = cv2.split(image)  #将图像通道分离开
rgb_image = cv2.merge([r,g,b]) #以RGB的形式重新组合
 
#image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 也可以使用这个函数直接转换成RGB 形式
plt.imshow(rgb_image)
 
'''以io.imread方式读取图片'''
#image = io.imread(train_dir) #读图并显示 
#plt.imshow(image)

二、两种常见的图片裁剪方式:cv2.resize()与transform.resize()

1. 使用cv2.resize()裁剪后的图片仍以numpy array形式保存,数值取值范围为0至255。

2. 使用transform.resize()裁剪后的图片以float64格式存储,数值取值范围为0至1。在制作tfrecord数据集时,通常需要将其转换回numpy array形式,具体代码参考。

transform裁剪与格式转换示例


'''以io.imread方式读取图片并使用transform形式裁剪图片'''
image = io.imread(train_dir) #读图并显示 
plt.imshow(image)
image =transform.resize(image, (208, 208))
img = image * 255 #将图片的取值范围改成(0~255)
img = img.astype(np.uint8) 
 
plt.imshow(img) 

读取和裁剪图片是制作tfrecord数据集的基础步骤。后续文章将进一步更新如何制作自定义tfrecord数据集及其读取方法。如有疏漏,欢迎指正。

以上关于TensorFlow中图片读取和裁剪方式的分享到此结束,希望能提供有益参考,欢迎支持。

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

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 算法库。