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

相关文章

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细

Java如何根据文件名前缀自动分组图片文件

《Java如何根据文件名前缀自动分组图片文件》一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用Java根据文件名前缀自动分组图... 目录需求背景分析思路实现代码输出结果知识扩展需求一大堆文件(比如图片)堆在一个目录下,它们的命名规

将图片导入Python的turtle库的详细过程

《将图片导入Python的turtle库的详细过程》在Python编程的世界里,turtle库以其简单易用、图形化交互的特点,深受初学者喜爱,随着项目的复杂度增加,仅仅依靠线条和颜色来绘制图形可能已经... 目录开篇引言正文剖析1. 理解基础:Turtle库的工作原理2. 图片格式与支持3. 实现步骤详解第

在React聊天应用中实现图片上传功能

《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py