高级图像处理工具

图像处理-高级

1、功能概览

随着社交媒体的普及和个人创作需求的增长,图像处理成为了日常生活中不可或缺的一部分。无论是专业的设计师还是爱好者,都需要一款强大的工具来帮助他们完成各种任务。今天,我们将介绍一款基于Python开发的高级图像处理工具,它不仅易于使用,还提供了丰富的功能,让您的图像编辑工作变得更加高效。

这款工具包含了以下主要功能:

  1. 图像查看器 (Image Viewer)
    • 显示图像 (Display image):能够加载并显示各种常见格式的图像,如JPEG, PNG, 和BMP。
    • 支持多种图像格式 (Support multiple image formats):支持多种图像格式,让您可以轻松地处理来自不同来源的图片。
  2. 图像基本信息 (Image Basic Information)*
    • 获取图像尺寸 (Get image dimensions):获取图像的高度和宽度信息。
    • 获取颜色模式 (Get color mode):确定图像的颜色模式,例如RGB或灰度。
  3. 格式转换 (Format Conversion)
    • 有时候,您可能需要将图像从一种格式转换为另一种格式。这款工具提供了便捷的格式转换功能,只需几秒钟,您就可以将图像从JPEG转换为PNG,或从BMP转换为TIFF,满足您的各种需求。
  4. 人脸增强修复
    • 基于生成对抗网络(GAN)的面部修复算法,专为处理低质量、模糊或损坏的面部图像而设计。该算法通过结合生成对抗网络和面部先验知识,能够在保留面部特征和细节的同时,有效地修复图像中的缺陷,使得最终生成的图像更加清晰和自然。
  5. 超分辨率重建
    • 超分辨率是一种图像处理技术,旨在将低分辨率(Low-Resolution, LR)图像恢复为高分辨率(High-Resolution, HR)图像。这项技术在许多领域都有广泛的应用,包括医学影像、卫星遥感、视频处理和增强现实等。这款工具采用了先进的超分辨率重建算法,能够显著提升图像的清晰度和细节,让您的图像看起来更加逼真和细腻。

2、启用工具

2.1 使用exe文件直接启动(Windows系统

  • dist文件夹内存在main.exe文件:
    • 可以在终端打开(建议);
    • 也可以双击打开;

在这里插入图片描述

在这里插入图片描述

2.2 使用pycharm启动

  • 如果你想更改代码或添加功能,可以创建python环境进行二次创作;
  • 在环境上安装依赖库:
pip install -r requirements.txt

3、功能介绍

3.1 图像查看器

  1. 支持多种图像格式:加载并显示各种常见格式的图像,如jpg、jpeg、png、bmp、tiff。用户通过点击图像选择即可选取电脑中的图像文件。

在这里插入图片描述

  1. 选择文件后,会显示该图像的基本信息:

    • 获取文件名称

    • 获取文件类型:文件的后缀名

    • 获取图像尺寸:获取图像的高度和宽度信息。

    • 获取颜色模式 :确定图像的颜色模式,例如RGB或灰度

  2. 可以通过宽度选择滑块控制图像显示尺寸

在这里插入图片描述

3.2 格式转换

修改图像后缀,允许用户在不同格式之间转换图像文件。

  1. 勾选是否格式转换按钮,确定是否使用该功能。

在这里插入图片描述

  1. 通过下拉菜单选择待转换格式

在这里插入图片描述

  1. 选择格式后,右侧会出现转换后的图像:

    • 自动显示图像文件自动保存的位置

    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.4 人脸增强修复

本工具采用基于生成对抗网络(GAN)的面部修复算法,专为处理这些问题而设计。该算法通过结合生成对抗网络和面部先验知识,能够在保留面部特征和细节的同时,有效地修复图像中的缺陷,使得最终生成的图像更加清晰和自然。

  • 该模型文件过大,由此放在其他位置下载:【免费】advancedImg/gfpgan模型文件资源-CSDN文库
  • 请将解压后的文件放入gfpgandist/gfpgan中
3.4.1 安装依赖basicsr的问题解决
  • 正常安装时可能出现报错,这是因为 setuptools 中的 installer 模块已被弃用,建议使用 PEP 517 兼容的安装工具来满足依赖项。

在这里插入图片描述

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple basicsr --use-pep517
  • 程序运行可能出现:ModuleNotFoundError: No module named 'torchvision.transforms.functional_tensor' ,表明你的 torchvision 版本可能不支持 functional_tensor 模块。
  • 修改basicsr/data/degradations.py
    • 头文件from torchvision.transforms.functional_tensor import rgb_to_grayscale改成from torchvision.transforms.functional import to_grayscale;
    • rgb_to_grayscale函数使用的地方改成to_grayscale
"venv/lib/python3.8/site-packages/basicsr/data/degradations.py"    
from torchvision.transforms.functional_tensor import rgb_to_grayscale
ModuleNotFoundError: No module named 'torchvision.transforms.functional_tensor'
# from torchvision.transforms.functional_tensor import rgb_to_grayscale
from torchvision.transforms.functional import to_grayscale

在这里插入图片描述

3.4.2 示例
  1. 勾选是否进行人脸增强按钮,确定是否使用该功能。

在这里插入图片描述

  1. 选择功能后,右侧会出现增强后的图像:

    • 自动显示图像文件自动保存的位置

    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述

3.5 超分辨率重建

超分辨率是一种图像处理技术,旨在将低分辨率(Low-Resolution, LR)图像恢复为高分辨率(High-Resolution, HR)图像。这项技术在许多领域都有广泛的应用,包括医学影像、卫星遥感、视频处理和增强现实等。这款工具采用了先进的超分辨率重建算法,能够显著提升图像的清晰度和细节,让您的图像看起来更加逼真和细腻。

  1. 勾选是否超分按钮,确定是否使用该功能

在这里插入图片描述

  1. 选择超分图像类型及超分倍数:

    • 通用图像支持2、4倍放大。

    • 动漫图像仅支持 4 倍放大!不需要选择超分倍数!

在这里插入图片描述
在这里插入图片描述

  1. 选择参数后,右侧会出现超分后的图像:

    • 自动显示图像文件自动保存的位置

    • 也可以通过点击下载图像按钮直接下载到本地下载目录

在这里插入图片描述
在这里插入图片描述

3.6 功能联合使用

本工具的功能按照功能模块从上到下顺序执行,因此可以联合使用,示例如下:

选择格式转换功能—选择人脸增强功能—选择超分功能

  1. 选择格式转换:可以将最终结果以png格式保存
    在这里插入图片描述

  2. 选择人脸增强功能:先使用人脸增强来修复和增强图像中的人脸部分

在这里插入图片描述

  1. 选择超分功能:然后再使用超分来提升整个图像的分辨率和细节。

在这里插入图片描述

4、生成可执行文件

4.1 生成已安装库文件

  1. 生成依赖库

确保你在开发环境中安装了所有应用程序运行所需的库,包括 Streamlit 和任何其他第三方库。通过 pip freeze > requirements.txt 命令生成一个包含所有已安装库及其版本号的文件。

如果你想使用pip freeze命令生成一个仅包含已安装库名称而不包含版本号的requirements.txt文件:

pip freeze | sed 's/==.*$//' > requirements.txt
  1. 安装依赖库:
pip install -r requirements.txt

4.2 安装pyinstaller

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

4.3 打包

4.3.1 打包 Python 应用程序
  • pyinstaller会自动处理大多数依赖关系,并将它们打包到最终的可执行文件中。
  • --onefile选项表示将所有依赖项合并到一个单一的可执行文件中;
  • --windowed 选项则表示生成的应用程序将在没有控制台窗口的情况下运行(仅适用于 Windows)。
pyinstaller --onefile --windowed main.py
4.3.2 pyinstaller打包streamlit预处理
  • PyInstaller 虽然会自动处理大多数依赖关系,但是streamlit库一般无法正确处理,可以使用下面的办法解决:
  1. 创建hook文件,放在hooks文件夹下(命名以hook开头)
from PyInstaller.utils.hooks import copy_metadata
 
datas = copy_metadata("streamlit")

在这里插入图片描述

  1. 在项目根目录下创建main.py
import os
import sys

import streamlit.web.cli as stcli


def resolve_path(path):
  resolved_path = os.path.abspath(os.path.join(os.getcwd(), path))
  print(resolved_path)
  return resolved_path


if __name__ == "__main__":
  sys.argv = [
    "streamlit",
    "run",
    # 填写streamlit启动页面(本文把启动文件app.py放在main.py同目录)
    resolve_path("app.py"),
    "--global.developmentMode=false",
  ]
  sys.exit(stcli.main())
4.3.3 进行第一次打包
  • --additional-hooks-dir=:指定一个目录,该目录中包含自定义的钩子文件(本文把钩子文件建立在hooks文件夹下)。这些钩子文件可以帮助 PyInstaller 更准确地处理某些库或模块。
  • 打包完成后会生成main.spec、dist、build文件
pyinstaller --onefile --additional-hooks-dir=./hooks main.py --clean
  • 第一次打包的执行文件可能依旧不会成功,因为我们没有指定streamlit库路径,我们可以在main.spec文件里进行编辑

    • datas=[('venv/lib/python3.8/site-packages','.')]:注意venv/lib/python3.8/site-packagesVirtualenv方式建立的python环境中安装包所在目录;

    • 如果你使用的是Conda创建环境,你需要找到所建环境的位置D:/anaconda/install/envs/advanceImg/Lib/site-packages

    • 找到某个库所建环境的位置:

      import os
      import streamlit
      import sys
      
      # 获取 streamlit 模块的文件位置
      streamlit_path = os.path.dirname(streamlit.__file__)
      print(f"Streamlit is located at: {streamlit_path}")
      
  • main.spec文件如下所示

# -*- mode: python ; coding: utf-8 -*-

a = Analysis(
    ['main.py'],
    pathex=[],
    binaries=[],
    # 第一个参数:config:这是指定要包含的源文件的路径。在这个例子中,config 是一个配置文件所在文件夹,位于与 main.py 同级的目录下。
    # 第二个参数:'config':这是指定目标路径。在这里,'config' 表示当前目录的config文件夹。这意味着在打包后的 EXE 文件运行时,config应该被放置在 EXE 文件所在的目录下。
    # venv/lib/python3.8/site-packages':注意一定要填写你的streamlit安装位置的上级目录
    # 如果你的程序只有一个启动文件`app.py`,没有配置文件夹或类似services文件夹,只需要datas=[('venv/lib/python3.8/site-packages','.')],
    datas=[('config','config'),('pages','pages'),('services','services'),('venv/lib/python3.8/site-packages','.')],
    hiddenimports=[],
    # 指定 Hook 文件所在的目录
    hookspath=['./hooks'],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='main',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)
4.3.4 进行第二次打包
  • 先将之前生成的dist和build文件删掉
pyinstaller main.spec --clean
# TODO 切记要在目标环境
D:\anaconda\install\envs\gongju\Scripts\pyinstaller.exe main.spec --clean
  • 注意:如果你的程序只有一个启动文件gui.py,没有配置文件夹或类似services文件夹,那么到这里应该就可以正常运行;否则:
    • 类似services文件夹(存放函数)需要复制到生成的dist里;
    • pages(存放streamlit页面)文件夹需要复制到生成的dist里
    • config配置文件夹建议复制到生成的dist里,因为这样配置改变时才会生效
    • 启动文件app.py复制到生成的dist里

在这里插入图片描述

4.3.5 优化内存
  • 此时虽然可以正常运行,但是打包后的执行文件很大,如何优化打包内存?
    • 编辑main.spec的 pathex 参数:该参数用于指定可执行文件运行时的路径列表。这个列表中的路径会被用来寻找与应用程序相关的文件。pathex 参数对最终可执行文件的大小有显著影响,因为它决定了哪些文件和目录会被包含在最终的打包结果中
    • 设置pathex=[‘.’]:当 pathex=[‘.’] 时,PyInstaller 会明确地告诉打包工具只在当前工作目录下查找所需的文件和依赖项。这样可以减少不必要的文件被包含进来,从而减小最终可执行文件的大小。

5、源码下载路径

下载源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/910958.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

江协科技STM32学习- P38 软件SPI读写W25Q64

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

P5665 [CSP-S2019] 划分

P5665 [CSP-S2019] 划分 难度:省选/NOI-。 考点:单调队列、贪心、前缀和。 题意: 没有题目大意,本题题目描述较长,认真阅读每一个信息。 ​ 这个题的样例有 n n n 组数据,数据从 1 ∼ n 1 \sim n 1∼n…

ThreadX在STM32上的移植:F1,F4通用启动文件tx_initialize_low_level.s

在嵌入式系统开发中,实时操作系统(RTOS)的选择对于系统性能和稳定性至关重要。ThreadX是一种广泛使用的RTOS,它以其小巧、快速和可靠而闻名。在本文中,我们将探讨如何将ThreadX移植到STM32微控制器上,特别是…

RTT 内核基础学习

RT-Thread 内核介绍 内核是操作系统的核心,负责管理系统的线程、线程间通信、系统时钟、中断以及内存等。 内核位于硬件层之上,内核部分包括内核库、实时内核实现。 内核库是为了保证内核能够独立运行的一套小型的类似C库的函数实现子集。 这部分根据编…

qt QPixmapCache详解

1、概述 QPixmapCache是Qt框架中提供的一个功能强大的图像缓存管理工具类。它允许开发者在全局范围内缓存QPixmap对象,从而有效减少图像的重复加载,提高图像加载和显示的效率。这对于需要频繁加载和显示图像的用户界面应用来说尤为重要,能够…

纯css制作声波扩散动画、js+css3波纹催眠动画特效、【css3动画】圆波扩散效果、雷达光波效果完整代码

一、纯css制作声波扩散动画 参考文章&#xff1a;纯css制作声波扩散动画 播放效果通过音频状态来控制 效果如下 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>波纹动画特效…

CocosCreator 构建透明背景应用(最新版!!!)

文章目录 透明原理补充设置截图以及代码step1: electron-js mian.jsstep2:ENABLE_TRANSPARENT_CANVASstep3:SOLID_COLOR Transparentstep:4 Build Web phonestep5:package electron-js & change body background-color 效果图补充 透明原理 使用Cocos creator 做桌面应用开…

在数据抓取的时候,短效IP比长效IP有哪些优势?

在数据抓取领域&#xff0c;代理IP的选择对于任务的成功率和效率至关重要。短效IP和长效IP各有其特点和适用场景&#xff0c;但在数据抓取过程中&#xff0c;短效IP因其独特的优势而受到青睐。本文将和大家一起探讨短效IP在数据抓取中相比长效IP的优势。 短效IP的定义与特点 …

FTP文件传输操作步骤

FTP文件传输操作步骤 步骤一&#xff1a;运行FTPServer.exe程序 步骤二、设置用户名和密码密码 步骤三、设置共享文件夹 步骤五、点击启动 步骤六、查看电脑ip(FTP server端) 步骤七、连接FTP 此电脑&#xff0c;地址栏输入&#xff1a;ftp://192.168.1.100 回车即可&…

【react使用AES对称加密的实现】

react使用AES对称加密的实现 前言使用CryptoJS库密钥存放加密方法解密方法结语 前言 项目中要求敏感信息怕被抓包泄密必须进行加密传输处理&#xff0c;普通的md5加密虽然能解决传输问题&#xff0c;但是项目中有权限的用户是需要查看数据进行查询的&#xff0c;所以就不能直接…

【网络原理】关于HTTP状态码以及请求的构造的哪些事

前言 &#x1f31f;&#x1f31f;本期讲解关于HTTP协议的重要的机制~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…

苹果发布iOS 18.2首个公测版:Siri接入ChatGPT、iPhone 16拍照按钮有用了

今天凌晨&#xff0c;苹果正式发布了iOS 18.2首个公测版&#xff0c;将更多AI功能大批量推送给用户。其中最重要的就是Siri接入ChatGPT了&#xff0c;用户不必创建账户就可以免费使用ChatGPT&#xff0c;Siri将利用ChatGPT的专业知识回答用户问题&#xff0c;并在查询之前征求用…

前端 Canvas 绘画 总结

目录 一、使用案例 1、基础使用案例 2、基本案例改为直接JS实现 二、相关资料 1、API教程文档 2、炫酷案例 一、使用案例 1、基础使用案例 使用Canvas的基本步骤&#xff1a; 1、需要一个canvas标签 2、需要获取 画笔 对象 3、使用canvas提供的api进行绘图 <!--…

高级 <HarmonyOS主题课>借助AR引擎帮助应用实现虚拟与现实交互的能力的课后习题

持而盈之&#xff0c;不如其已&#xff1b; 揣而锐之&#xff0c;不可长保。 金玉满堂&#xff0c;莫之能守&#xff1b; 富贵而骄&#xff0c;自遗其咎。 功成身退&#xff0c;天之道也。 VR (Virtual Reality): 虚拟现实技术 AR (Augmented Reality): 增强现实) XR.(Extend…

tp接口 入口文件 500 错误原因

一、描述 二、可能的原因 1、runtime目录没权限 2、关闭了Tp记录日志的功能 3、关闭debug调试模式 4、关闭了debug模式还是报错 一、描述 Thinkphp项目本地正常&#xff0c;上传到线上后静态文件访问正常&#xff0c;访问tp接口报500错误。 经调试发现&#xff0c;在php入…

解决:ros进行gazebo仿真,rviz没有显示传感器数据

目录 前言解决总结 前言 看了很多urdf、xacro文件的编写&#xff0c;每次看了都觉得自己会了&#xff0c;然后自己写一点&#xff0c;就是废物了。 在我这里的案例是&#xff0c;我在一个大方块上面&#xff0c;添加了两个VLP-16的雷达&#xff0c;然后我想获取雷达扫描的数据…

C语言 | Leetcode C语言题解之第546题移除盒子

题目&#xff1a; 题解&#xff1a; int dp[100][100][100];int calculatePoints(int* boxes, int l, int r, int k) {if (l > r) {return 0;}if (dp[l][r][k] 0) {int r1 r, k1 k;while (r1 > l && boxes[r1] boxes[r1 - 1]) {r1--;k1;}dp[l][r][k] calcu…

基于开源 AI 智能名片、S2B2C 商城小程序的用户获取成本优化分析

摘要&#xff1a;本文围绕用户获取成本&#xff08;CAC&#xff09;这一关键指标展开深入剖析&#xff0c;详细阐述其计算方式&#xff0c;并紧密结合开源 AI 智能名片与 S2B2C 商城小程序的独特性质&#xff0c;从多个维度探讨如何通过挖掘新的获客渠道、巧妙运用私域流量池等…

实践出真知:MVEL表达式中for循环的坑

目录标题 背景MVEL脚本(有问题的)MVEL脚本(正确的)结论分析 背景 需要从一个URL的拼接参数中解析出id的值并输出 比如&#xff1a; 存在URLhttps://xxxxxxxxxx?id999999&type123&name345 然后需要输出id999999 MVEL脚本(有问题的) 入参&#xff1a;parseThisUrlhttp…

【C#】使用.net9在C#中向现有对象动态添加属性

在 C# 中向现有对象动态添加属性并不像在 Python 或 JavaScript 中那样容易&#xff0c;因为 C# 是一种强类型语言。 但是&#xff0c;我们可以通过使用一些技术和库来实现这一点&#xff0c;例如扩展方法、字典等。本文将详细介绍如何在 C# 中实现这一点。ExpandoObject 方法 …