• 作者:老汪软件技巧
  • 发表时间:2024-11-07 11:01
  • 浏览量:

图像处理-初级1、功能概览

初级图像处理工具旨在为用户提供一个易于使用的界面来执行常见的图像处理任务。该工具集成了多项实用功能,从显示和调整图像的基本属性到应用各种滤镜效果,用户都可以通过简单的命令行交互来完成。

我们的初级图像处理工具包含以下几个主要功能:

图像查看器 (Image Viewer)

图像基本信息 (Image Basic Information)

格式转换 (Format Conversion)

旋转翻转操作 (Rotation and Flipping)

图像调整 (Image Adjustment)

颜色转换 (Color Conversion)

滤镜应用 (Filter Application)

2、启用工具2.1 使用exe文件直接启动(Windows系统)2.2 使用pycharm启动

pip install -r requirements.txt

3、功能介绍3.1 图像查看器支持多种图像格式:加载并显示各种常见格式的图像,如jpg、jpeg、png、bmp、tiff。用户通过点击图像选择即可选取电脑中的图像文件。

在这里插入图片描述

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

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

在这里插入图片描述

3.2 格式转换

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

3.3 旋转翻转功能

用户可以按照指定的角度旋转图像、垂直或水平地翻转图像。

勾选是否旋转翻转按钮,确定是否使用该功能。

在这里插入图片描述

通过旋转角度选择滑块控制图像旋转角度、通过勾选水平或垂直翻转按钮控制图像翻转

在这里插入图片描述

选择旋转和翻转功能后,右侧会出现转换后的图像:

3.4 颜色转换

根据用户传入的图像类型自动更新功能选择:

3.4.1 RGB图像

用户传入RGB图像

勾选是否颜色转换按钮,确定是否使用该功能。

在这里插入图片描述

通过下拉菜单选择待转换的颜色空间类型

在这里插入图片描述

用户选择灰度图:将彩色图像转换为灰度图像

在这里插入图片描述

用户选择HSV:将彩色图像转换为HSV图像

在这里插入图片描述

3.4.2 灰度图像

用户传入灰度图像

勾选是否颜色转换按钮,确定是否使用该功能。

在这里插入图片描述

通过下拉菜单选择待转换的颜色空间类型

在这里插入图片描述

用户可以通过二值化阈值选择滑块控制图像二值化:大于阈值为255,小于阈值为0。

在这里插入图片描述

用户选择二值图像:将灰度图像转换为二值图像

在这里插入图片描述

3.5 调整亮度

图像调整亮度是指改变图像的整体亮度水平,使得图像看起来更亮或更暗。这是一项基本的图像处理技术,广泛应用于摄影后期处理、视频编辑以及各种图像处理应用程序中。

勾选是否调整亮度按钮,确定是否使用该功能。

在这里插入图片描述

选择亮度因子调整图像亮度:值为 1 表示原图,小于 1 表示降低亮度,大于 1 表示提高亮度

在这里插入图片描述

选择调整亮度功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.6 调整对比度

调整图像对比度是一种常见的图像处理技术,它可以使图像中的细节更加清晰,增强图像的视觉效果。对比度是指图像中最亮和最暗部分之间的差异程度。通过调整对比度,可以使得图像中的亮度分布更加均匀或者突出某些特征。

本工具采用Gamma校正改变图像的对比度,通过非线性的变换来调整图像的亮度,使得图像在不同光照条件下看起来更加自然。

勾选是否调整对比度按钮,确定是否使用该功能。

在这里插入图片描述

选择gamma因子调整图像对比度。

在这里插入图片描述

选择完gamma因子后,右侧会出现转换后的图像:

在这里插入图片描述

3.7 直方图均衡化

直方图均衡化通常适用于那些对比度不高或整体较暗的图像。它通过扩展图像的动态范围,从而使图像看起来更加清晰。

勾选是否直方图均衡化按钮,确定是否使用该功能。

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.8 模糊效果

模糊效果在图像处理中是一种常用的技术,用于减少图像中的细节或噪声,使图像看起来更加柔和。模糊可以通过不同的方法来实现,每种方法都有其独特的特点和适用场景。

3.8.1 高斯模糊

高斯模糊使用高斯分布作为权重,对图像进行平滑处理。高斯核在中心处最大,随着距离增加而逐渐减小,这使得邻近像素的影响随着距离的增加而减弱。适用于一般的模糊处理,可以有效减少图像中的高频噪声,同时保持图像的基本特征不变。

勾选是否开启模糊效果按钮,确定是否使用该功能。

在这里插入图片描述

选择卷积核大小。

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.8.2 均值模糊

均值模糊使用一个固定大小的窗口计算每个像素周围的平均值。这种方法简单直接,但由于不考虑像素之间的权重差异,可能导致边缘变得模糊。适用于简单的模糊处理,尤其是在需要快速模糊处理的情况下。

勾选是否开启模糊效果按钮,确定是否使用该功能。

在这里插入图片描述

选择卷积核大小。

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.8.3 中值模糊

中值模糊使用一个固定大小的窗口计算每个像素周围的中值。这种方法在去除椒盐噪声方面非常有效,因为中值滤波可以忽略掉那些极端的像素值。适用于去除椒盐噪声,即图像中随机出现的亮暗点。

勾选是否开启模糊效果按钮,确定是否使用该功能。

在这里插入图片描述

选择卷积核大小。

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.8.4 双边模糊

双边模糊结合了空间和颜色两个维度的信息,能够有效地保留边缘同时去除噪声。双边模糊在处理每个像素时不仅考虑其周围像素的空间位置关系,还考虑了颜色差异。适用于需要保留边缘细节的同时减少图像噪声的情况,例如在处理需要保持清晰边缘的图像时,如肖像或风景照片。

勾选是否开启模糊效果按钮,确定是否使用该功能。

在这里插入图片描述

选择参数:

_初级图像工具处理包括哪些_图像处理的工具

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.9 锐化效果

锐化效果是图像处理中常用的一种技术,用于增强图像的细节,使得图像看起来更加清晰。锐化通常是通过对图像中的边缘进行增强来实现的。下面详细介绍几种本工具的锐化方法:

3.9.1 Laplacian锐化

Laplacian 锐化通过使用 Laplacian 算子来检测图像中的边缘,并通过增强这些边缘来达到锐化的效果。Laplacian 算子是一个二阶微分算子,它可以检测图像中的突变点,也就是边缘。在图像处理中,通常将 Laplacian 算子的结果与原始图像相加来增强边缘,从而实现锐化。

勾选是否开启锐化效果按钮,确定是否使用该功能。

在这里插入图片描述

选择卷积核大小。

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.9.2 USM锐化

USM锐化:Unsharp Masking(USM)是一种经典的图像锐化技术。该技术首先创建一个图像的模糊版本作为掩模,然后从原始图像中减去这个模糊版本。这样做的目的是加强图像的边缘,因为模糊版本会弱化边缘细节。通过这种方式,图像中的边缘变得更加突出,整体锐度得到提升。USM锐化是一种直观且易于实现的方法,在许多图像编辑软件中都有应用。

勾选是否开启锐化效果按钮,确定是否使用该功能。

在这里插入图片描述

选择参数:

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.9.3 增强器Enhance锐化

增强器锐化技术是通过调整图像的频率成分来增强图像的锐度。这种方法基于频率域处理,利用傅里叶变换将图像转换到频率域,在此域中对特定频率范围内的成分进行增强,然后再反变换回空间域。通过这种方法,可以有效地强化图像中的高频成分(如边缘和细节),从而达到锐化的目的。

勾选是否开启锐化效果按钮,确定是否使用该功能。

在这里插入图片描述

选择增强因子:

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.9.4 高通滤波器锐化

高通滤波器(High-Pass Filter)是一种信号处理技术,专门用于通过抑制低频成分而保留高频成分。在图像处理中,高频成分往往对应于图像的细节部分,如边缘和其他细微特征。因此,高通滤波器可以用来增强图像中的细节,使图像更加清晰。与Laplacian锐化类似,高通滤波器也可以看作是在频率域内的一种锐化方法。

勾选是否开启锐化效果按钮,确定是否使用该功能。

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.10 边缘检测

在图像处理和计算机视觉领域,边缘检测是一种重要的技术,用于从图像中提取有意义的信息。边缘代表了图像中不同区域之间的过渡,通常是物体边界的重要标志。通过边缘检测,我们可以更好地理解图像的内容,并为进一步的图像分析提供基础。下面详细介绍本工具的几种边缘检测方法。

3.10.1 Sobel边缘检测

Sobel边缘检测是一种广泛使用的边缘检测技术,它通过两个卷积核分别计算图像在水平方向和垂直方向上的梯度。这两个方向上的梯度信息被结合起来,以确定边缘的位置。具体而言,Sobel算子使用两个3x3的核,一个用于计算x方向的梯度,另一个用于y方向。Sobel方法能够很好地突出图像中的变化区域,并且由于其对噪声有一定的抑制能力,因此在实际应用中非常受欢迎。

勾选是否开启边缘检测按钮,确定是否使用该功能。

在这里插入图片描述

选择卷积核大小:

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.10.2 Prewitt边缘检测

Prewitt边缘检测与Sobel边缘检测类似,同样是基于梯度的概念,但它使用了较小的3x3核。尽管Prewitt算子对图像细节的捕捉不如Sobel精细,但由于其核尺寸较小,因此在快速边缘检测方面仍然有效。Prewitt算子的核心是检测图像中强度变化较大的区域,从而定位边缘。

勾选是否开启边缘检测按钮,确定是否使用该功能。

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.10.3 Roberts边缘检测

Roberts边缘检测使用的是2x2的小核,它直接计算相邻像素之间的差异。由于核尺寸较小,Roberts算子可能会忽略一些细节信息,但在某些情况下,它可以提供更快的处理速度。Roberts算子的优点在于其简单性和快速性,但它的缺点是可能过于敏感,导致较多的假阳性边缘检测结果。

勾选是否开启边缘检测按钮,确定是否使用该功能。

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.10.4 Canny边缘检测

Canny边缘检测算法是一种多阶段的边缘检测方法,它包括五个步骤:高斯平滑、计算梯度幅度和方向、非极大值抑制、双阈值检测以及边缘连接。Canny算法旨在找到最有可能表示边缘的点集。它通过两个阈值来平衡边缘检测的敏感性和鲁棒性。如果弱边缘阈值设置得太高,那么许多真实的边缘可能会被错过;如果强边缘阈值设置得太低,那么可能会引入很多噪声。通常推荐的弱边缘阈值和强边缘阈值之间的比例为1:2或1:3。Canny算法因其在各种条件下的良好表现而成为边缘检测的标准之一。

勾选是否开启边缘检测按钮,确定是否使用该功能。

在这里插入图片描述

选择参数:

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.10.5 Laplacian边缘检测

Laplacian运算是一个二阶微分算子,用于查找图像中强度变化最大的地方。Laplacian算子主要用于边缘检测和图像锐化。它通过计算图像中每个像素的拉普拉斯值来确定边缘。拉普拉斯值大的地方通常对应于图像中的边缘。然而,Laplacian方法对噪声非常敏感,因此在实际应用中通常会先对图像进行平滑处理。

勾选是否开启边缘检测按钮,确定是否使用该功能。

在这里插入图片描述

选择卷积核大小:

在这里插入图片描述

选择功能后,右侧会出现转换后的图像:

在这里插入图片描述

3.11 功能联合使用

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

选择颜色转换功能—锐化功能—边缘检测功能

颜色转换:将RGB图像转换为灰度图

在这里插入图片描述

锐化功能:将灰度图进行锐化

在这里插入图片描述

将锐化结果进行边缘检测

在这里插入图片描述

4、生成可执行文件4.1 生成已安装库文件生成依赖库

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

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

pip freeze | sed 's/==.*$//' > requirements.txt

安装依赖库:

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 main.py

4.3.2 pyinstaller打包streamlit预处理创建hook文件,放在hooks文件夹下(命名以hook开头)

from PyInstaller.utils.hooks import copy_metadata
 
datas = copy_metadata("streamlit")

在这里插入图片描述

在项目根目录下创建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 进行第一次打包

pyinstaller --onefile --additional-hooks-dir=./hooks main.py --clean

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 进行第二次打包

pyinstaller main.spec --clean
# TODO 切记要在目标环境
D:\anaconda\install\envs\gongju\Scripts\pyinstaller.exe main.spec --clean

在这里插入图片描述

4.3.5 优化内存5、源码下载路径

下载源码