07_TensorFlow2图像编解码大揭秘:让图片说‘变’就‘变’,魔法还是科技?

2024-09-06 13:44

本文主要是介绍07_TensorFlow2图像编解码大揭秘:让图片说‘变’就‘变’,魔法还是科技?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

1. 图像的编码和解码

在实际应用中,图像数据源格式多种多样,如:png\jpg\bmp等,而神经网络训练模型所需的图像的数据格式为:图像字节数据或Base64编码数据等。基于此,将png\jpg\bmp等格式的图像转换为字节数据的过程称为图像编码,将字节数据的图像转换为png\jpg\bmp等格式图像的过程称为图像解码。

2. 图像编码

Tensorflow图像编码的过程如下图所示,分为3个过程:转换为字节数据、转为网络安全Base64数据、标准Base64数据。接下来对这三个过程一一解析。

在这里插入图片描述

2.1 转换为字节数据

通俗的讲,png\jpg\bmp等格式的图像转换为字节数据就是图像读取。tensorflow常用的图像读取函数为:tf.io.read_file和tf.io.gfile.

import tensorflow as tf
import os# 获取当前工作目录
# print(os.getcwd())
image_path = "./images/tfos_logo.png"
image_bytes = tf.io.read_file(image_path)
print("图像字节数据:{}".format(image_bytes))

2.2 转为网络安全 Base64 编码

网络安全的base64编码数据使用“-”代替“+”,使用“_”代替“/”,以保证数据在网络传输过程中的正确性。

image_s64=tf.io.encode_base64(image_bytes)
image_s64=format(image_s64)[2:-1]
print("网络安全的Base64编码:{}".format(image_s64))

2.3 转为标准 Base64 编码

标准的Base64数据中的“+”和“/”在网络中会被转换为“%XX”格式,而“%”在数据存储时必须进行转换。因此,标准Base64编码与网络安全的Base64编码之间的相互转换就是替换其中的不同之处即可。但是,需要注意的一点是:标准的Base64编码的数据大小是4的整数倍,不足的部分需要像卷积网络中的padding一样,用“=”补齐,已达到4的整数倍。

image_b64 = list(image_s64)
image_b64_lis = []
for i in range(len(image_b64)):
# - 替换为+if image_b64[i] == "-":image_b64_lis.append("+")elif image_b64[i] == "_":    # _替换为/image_b64_lis.append("/")else:image_b64_lis.append(image_b64[i])
# 不足4倍数的使用=填充
if len(image_b64_lis) % 4 == 0:pass
else:remainder = len(image_b64_lis) % 4for j in range(remainder):image_b64_lis.append("=")
image_b64 = "".join(image_b64_lis)
print("标准Base64编码:{}".format(image_b64))

3. 图像解码

Tensorflow中图像解码的过程与图像编码的格式正好相反,如图所示。

在这里插入图片描述

在Tensorflow中,图像数据处理是基于图像矩阵数据进行的,因此解码过程需要将字节数据转换为矩阵数据。

3.1 标准 Base64 解码转网络安全 Base64 数据

import tensorboard
import tensorflow as tf
import base64
from tensorflow.keras import Sequential, layers, losses, optimizers, datasets
import datetime
import matplotlib.pyplot as plt#
image_path= "./images/tfos_logo.png"
with open(image_path,"rb")as f:image_data = f.read()# 图像文件编码为标准base64字节image_standard_b64_bytes = base64.b64encode(image_data)# 标准base64字节转换为字符串image_standard_b64_str = image_standard_b64_bytes.decode("utf8")# 标准base64字符串转为列表standard_b64_list = list(image_standard_b64_str)# 网络安全base64编码列表websafe_b64_list = []for i in range(len(standard_b64_list)):# /替换为_if standard_b64_list[i] == "/":websafe_b64_list.append("_")# +替换为-elif standard_b64_list[i] == "+":websafe_b64_list.append("-")# 剔除=elif standard_b64_list[i] == "=":breakelse:websafe_b64_list.append(standard_b64_list[i])# 网络安全base64列表转为字符串websafe_b64_str = "".join(websafe_b64_list)
web_b64_tensor = tf.convert_to_tensor(websafe_b64_str)
web_b64_decode = tf.io.decode_base64(web_b64_tensor)
image_matrix = tf.io.decode_image(web_b64_decode)
plt.imshow(image_matrix)
plt.show()

在这里插入图片描述

3.2 网络安全的 Base64 编码解码

import tensorflow as tf
import matplotlib.pyplot as plt
image_path="./images/tfos_logo.png"
# 图像读取
image_bytes = tf.io.read_file(image_path)
image_b64 = tf.io.encode_base64(image_bytes)
image_b64 = tf.io.decode_base64(image_b64)
image_matrix = tf.io.decode_image(image_b64)
plt.imshow(image_matrix)
plt.show()

在这里插入图片描述

这篇关于07_TensorFlow2图像编解码大揭秘:让图片说‘变’就‘变’,魔法还是科技?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142165

相关文章

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传