高级图像处理工具

news2024/11/8 9:11:55

图像处理-高级

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、源码下载路径

下载源码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Zookeeper集群搭建】安装zookeeper、zookeeper集群配置、zookeeper启动与关闭、zookeeper的shell命令操作

目录 一、安装Zookeeper 二、配置Zookeeper集群 三、Zookeeper服务的启动与关闭 四、Zookeeper的shell操作 前情提要:延续上篇【Hadoop和Hbase集群配置】继续配置Zookeeper,开启三台虚拟机Hadoop1、Hadoop2、Hadoop3,进入终端&#xff0c…

Transformer和BERT的区别

Transformer和BERT的区别比较表: 两者的位置编码: 为什么要对位置进行编码? Attention提取特征的时候,可以获取全局每个词对之间的关系,但是并没有显式保留时序信息,或者说位置信息。就算打乱序列中token…

Python爬虫如何处理验证码与登录

Python爬虫如何处理验证码与登录 Python 爬虫在抓取需要登录的网站数据时,通常会遇到两个主要问题:登录验证和验证码处理。这些机制是网站用来防止自动化程序过度抓取数据的主要手段。本文将详细讲解如何使用 Python 处理登录与验证码,以便进…

《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析

导读:SQL 诞生于 20 世纪 70 年代,至今已有半个世纪。SQL 语言具有语法简单,低学习门槛等特点,诞生之后迅速普及与流行开来。由于 SQL 具有易学易用的特点,使得开发人员容易掌握,企业若能在其计算机软件中支…

JS实现,防抖节流 + 闭包

防抖(Debounce) 防抖是指短时间内大量触发同一事件,只会在最后一次事件完成后延迟执行一次函数。 防抖的典型应用场景是输入框的搜索建议功能,用户输入时不需要每次输入都去查询,而是在用户停止输入一段时间后才进行…

安卓编程最方便的读写资料类SharedPreferences,多个APP共享

本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据 …

数据分析:转录组差异fgsea富集分析

文章目录 介绍加载R包数据链接导入数据数据预处理DE testing: 2BP vs no-BP比较limma-voomLoad steroid dataIn No-BP patientsIn 2BP patientsCompare gene expression vs bacterial mass其他系统信息介绍 转录组差异fgsea富集分析是一种基于基因集的富集分析方法,它关注的是…

Day13杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> res new Arra…

Avalonia11如何优雅的跨组件通信

背景&#xff1a; 官网只介绍了推荐适用ReactiveUI&#xff0c;没有过多的案例介绍&#xff0c;对于初入桌面应用开发的小白极其不友好。 本文介绍在Avalonia应用中通过ReactiveUI中的MessageBus进行跨组件通信. 假设需求案例&#xff1a; MainWindowViewModel中发送消息&a…

【开发实战】彻底了解 ThreadLocal

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 中级 🙉八股文专题:剑指大厂,手撕 J…

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

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

KV260 - PYNQ 主目录 - U盘挂载

目录 1. 简介 2. 具体操作 2.1 查看 USB 设备 2.2 查看 U 盘设备节点 2.3 挂载 U 盘到指定目录 2.4 查看挂载状态 2.5 卸载 U 盘 3. 总结 1. 简介 在 KV260 使用 Jupyter Lab 可以非常方便开发各种应用。有时不方便在 PC 端连接 U 盘&#xff0c;那么可以把 U 盘连在 …

金媒婚恋相亲系统10.4择爱开源旗舰版支持微信小程和抖音小程序上架

最近大家应该注意到了&#xff0c;金媒婚恋相亲系统已经更新至最新的10.4版本了&#xff01;本人作为商业用户也已经更新至最新的旗舰版了&#xff0c;更新的内容是啥&#xff01;这个官方都有列出&#xff0c;一个方面就是更新了多端的登录逻辑和UI 和后台CRM及很多细节的优化…

用环形数组实现队列(多种高级方法,由浅入深)

同普通数组实现的队列相比&#xff0c;普通数组的头结点和尾节点都是固定的&#xff0c;在进行移除的时候如果移除了一个节点&#xff0c;后面所有节点都需要进行移除操作&#xff0c;需要的时间复杂度更高 在环形数组中&#xff0c;确定了头尾指针的环形数组很好地解决了这一…

【毫米波雷达(七)】自动驾驶汽车中的精准定位——RTK定位技术

一、什么是RTK&#xff1f; RTK&#xff0c;英文全名叫做Real-time kinematic&#xff0c;也就是实时动态。这是一个简称&#xff0c;全称其实应该是RTK&#xff08;Real-time kinematic&#xff0c;实时动态&#xff09;载波相位差分技术。 二、RTK的组装 如上图所示&#x…

小北的字节跳动青训营与调用模型:调用模型:OpenAI API vs 微调开源Llama2/ChatGLM(持续更新中~~~)

前言 最近&#xff0c;字节跳动的青训营再次扬帆起航&#xff0c;作为第二次参与其中的小北&#xff0c;深感荣幸能借此机会为那些尚未了解青训营的友友们带来一些详细介绍。青训营不仅是一个技术学习与成长的摇篮&#xff0c;更是一个连接未来与梦想的桥梁~ 小北的青训营 X M…

通过DNS服务器架构解释DNS请求过程

在前面的章节&#xff0c;这里&#xff0c;基于PCAP数据包和RFC文档详细介绍了DNS请求和响应的每个字段的含义。但是在现实的网络世界中&#xff0c;DNS请求和响应的数据包是怎么流动的&#xff0c;会经过哪些设备。本文将着重说明一下目前网络空间中DNS请求和响应的流动过程。…

Netty实现WebSocket Server是否开启压缩深度分析

是否开启压缩会直接影响与客户端是否能够成功握手。 一、具体分析 通常客户端发起与Websocket连接一般是以下形式。 1&#xff09;包含6个必要的Header Request Headers Sec-WebSocket-Version: 13 Sec-WebSocket-Key: Nlpc0kiHFjRom5/62lj8bA Connection: Upgrade Upgrade…

IntelliJ IDEA 2023.2——配置说明

IntelliJ IDEA 2023.2——配置说明 IntelliJ IDEA 的官方下载地址 IntelliJ IDEA 官网下载地址 一路上NEXT 到结尾&#xff1a; 继续NEXT 下一步: 界面如下图所示 界面如下图所示 ctrl F 查找 “码猿趣事” 查找【idea99】

算法通关(4)-- 前缀树

前缀数原理和代码 原理 前缀树&#xff08;Trie树&#xff09;&#xff0c;也称为字典树&#xff0c;是一种用于高效存储和检索字符串的数据结构。它是一种树形结构&#xff0c;能够利用字符串的公共前缀来减少存储空间和查询时间。 现在有“acb”,"cba","ac…