公司网站维护费 入什么科目,合购吧登录WordPress,怎么做一个局域网站,国际域名注册查询目录 1、任务概述2、环境安装2.1 创建虚拟环境2.2 安装依赖库 3、程序开发3.1 框架搭建3.2 读取图像3.3 图像处理 4、打包部署5、小结 1、任务概述
本篇博文将通过PyQT5来实现一个简单的图像处理应用#xff0c;并完成打包部署。
本文开发平台#xff1a;Windows10 64位系统… 目录 1、任务概述2、环境安装2.1 创建虚拟环境2.2 安装依赖库 3、程序开发3.1 框架搭建3.2 读取图像3.3 图像处理 4、打包部署5、小结 1、任务概述
本篇博文将通过PyQT5来实现一个简单的图像处理应用并完成打包部署。
本文开发平台Windows10 64位系统。部署平台Windows7 64位系统。
具体实现效果如下 由于PyQT依赖Python因此在学习下面的章节前请先安装好Python。本教程使用的Python版本为3.8.0由于部署平台为Windows7因此不能使用Python3.8以上版本。
2、环境安装
2.1 创建虚拟环境
为方便后面打包部署我们将相关Python的依赖库存放到虚拟环境中因此需要先创建一个虚拟环境。
Windows平台下的虚拟环境需要使用第三方工具virtualenv来创建打开命令终端输入下面的命令即可完成安装
pip install virtualenv -i https://mirror.baidu.com/pypi/simple创建一个项目文件夹demo我们现在的目标就是在这个demo项目中创建python虚拟环境这个虚拟环境是专门为demo项目成立的。在命令行终端中通过cd命令进入项目目录中假设demo文件夹位于D:\code目录下
输入下面的命令用来创建名为venv的虚拟环境
virtualenv env这样我们就在demo文件夹下有了一个名为env的子文件夹它保存了一个全新的虚拟环境其中有一个私有的Python解释器位于demo/env/Scripts在该虚拟环境中安装的python包会存放在demo/env/Lib路径下。
最后在Windows平台下激活并使用该虚拟环境
env\Scripts\activate如下图所示 成功激活之后虚拟环境解释器的路径就被加入PATH中但这种改变不是永久的他只会影响当前的命令行终端。
2.2 安装依赖库
在虚拟环境中安装pyqt5和opencv
pip install pyqt5 opencv-python -i https://mirror.baidu.com/pypi/simple其中pyqt5用于开发界面程序而opencv用于图像处理算法操作。
3、程序开发
3.1 框架搭建
在demo文件夹下面创建一个名为main.py的脚本内容如下
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QLabel, QFileDialog
from PyQt5.QtCore import QRect,QCoreApplication,Qt
from PyQt5.QtGui import QPixmap,QImageclass MainWindow(QMainWindow):def __init__(self, parentNone):super(MainWindow, self).__init__(parent)# 调整窗体self.resize(500, 300) # 主窗体宽高设置self.setWindowTitle(示例程序) # 主窗体名称# 创建2个图像标签self.preImgLabel QLabel(, self)self.preImgLabel.setGeometry(QRect(30, 30, 200, 200))self.preImgLabel.setStyleSheet(background-color: rgb(232, 232, 232);)self.preImgLabel.setScaledContents(True)self.aftImgLabel QLabel(, self)self.aftImgLabel.setGeometry(QRect(270, 30, 200, 200))self.aftImgLabel.setStyleSheet(background-color: rgb(232, 232, 232);)self.aftImgLabel.setScaledContents(True)# 创建2个按钮组件self.chooseBtn QPushButton(选择图片, self)self.chooseBtn.clicked.connect(self.choosePic)self.chooseBtn.setGeometry(QRect(170, 250, 60, 30))self.processBtn QPushButton(图片处理, self)self.processBtn.clicked.connect(self.imgProcess)self.processBtn.setGeometry(QRect(270, 250, 60, 30))self.imgName def choosePic(self):选择图片passdef imgProcess(self):图片处理passself.aftImgLabel.setStyleSheet(border: 2px solid red)if __name__ __main__:程序主入口QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) # 设置屏幕分辨率自适应app QApplication(sys.argv) # 创建应用main MainWindow() # 创建主窗体main.show() # 显示主窗体sys.exit(app.exec()) # 进入主窗体生命周期
上述脚本创建了一个主窗体包括2个label组件、2个按钮组件同时对两个按钮组件创建了对应的槽函数choosePic和imgProcess。
运行该脚本效果如下图所示 可以看到使用PySide6来开发界面程序非常简单代码量很少。
3.2 读取图像
下面完善main.py文件的代码单击选择图片按钮可以浏览本地计算机里的图像并且将图像显示到左侧图像面板中。
具体的只需要修改choosePic函数即可
def choosePic(self):选择图片self.imgName, _ QFileDialog.getOpenFileName(self, 打开图片, , *.jpg;;*.png;;All Files(*))if self.imgName :returnpix QPixmap(self.imgName)self.preImgLabel.setPixmap(pix)self.preImgLabel.setStyleSheet(border: 2px solid blue)3.3 图像处理
这里我们将使用opencv完成图像gamma矫正提升图像整体亮度完整代码如下
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QLabel, QFileDialog
from PyQt5.QtCore import QRect,QCoreApplication,Qt
from PyQt5.QtGui import QPixmap,QImage
import cv2
import numpy as npdef adjust_gamma(image, gamma1.0):gamma矫正invGamma 1.0 / gammatable np.array([((i / 255.0) ** invGamma) * 255 for i in np.arange(0, 256)]).astype(uint8)return cv2.LUT(image, table)class MainWindow(QMainWindow):def __init__(self, parentNone):super(MainWindow, self).__init__(parent)# 调整窗体self.resize(500, 300) # 主窗体宽高设置self.setWindowTitle(示例程序) # 主窗体名称# 创建2个图像标签self.preImgLabel QLabel(, self)self.preImgLabel.setGeometry(QRect(30, 30, 200, 200))self.preImgLabel.setStyleSheet(background-color: rgb(232, 232, 232);)self.preImgLabel.setScaledContents(True)self.aftImgLabel QLabel(, self)self.aftImgLabel.setGeometry(QRect(270, 30, 200, 200))self.aftImgLabel.setStyleSheet(background-color: rgb(232, 232, 232);)self.aftImgLabel.setScaledContents(True)# 创建2个按钮组件self.chooseBtn QPushButton(选择图片, self)self.chooseBtn.clicked.connect(self.choosePic)self.chooseBtn.setGeometry(QRect(170, 250, 60, 30))self.processBtn QPushButton(图片处理, self)self.processBtn.clicked.connect(self.imgProcess)self.processBtn.setGeometry(QRect(270, 250, 60, 30))self.imgName def choosePic(self):选择图片self.imgName, _ QFileDialog.getOpenFileName(self, 打开图片, , *.jpg;;*.png;;All Files(*))if self.imgName :returnpix QPixmap(self.imgName)self.preImgLabel.setPixmap(pix)self.preImgLabel.setStyleSheet(border: 2px solid blue)def imgProcess(self):图片处理# 读取图像img cv2.imread(self.imgName) # OpenCV 读取图像if img is None:print(图像读取失败)return# gamma矫正img adjust_gamma(img, gamma1.8)# 转qt格式qtImg QImage(img.data, img.shape[1], img.shape[0], QImage.Format_RGB888).rgbSwapped() self.aftImgLabel.setPixmap((QPixmap.fromImage(qtImg))) self.aftImgLabel.setStyleSheet(border: 2px solid red)if __name__ __main__:程序主入口QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) # 设置屏幕分辨率自适应app QApplication(sys.argv) # 创建应用main MainWindow() # 创建主窗体main.show() # 显示主窗体sys.exit(app.exec()) # 进入主窗体生命周期运行效果如本文开篇图片所示。
4、打包部署
我们最终希望交给用户是一个纯粹的exe可执行文件可以包含一些dll之类的动态库或配置文件用户不需要安装Python依赖直接双击就可以运行展示。下面我们来实现最后的这个环节。
首选安装打包工具
pip install pyinstaller auto-py-to-exe -i https://mirror.baidu.com/pypi/simple在终端中运行auto-py-to-exe会自动打开浏览器然后进入打包部署配置页面。对于本项目按照下图所示进行勾选即可 最后单击执行即可。打包好的程序位于demo/output/main文件夹中如下图所示 其中main.exe就是最后的可执行程序_internal就是该程序的依赖库。部署时将整个main文件夹拷贝到部署机器上运行即可。
部署运行时部分机器可能会出现下图所示错误 这里只需要下载一个64位的api-ms-win-core-path-l1-1-0.dll文件然后将其拷贝到输出目录的main/_internal文件夹下面即可。
5、小结
使用PyQT开发界面程序可以充分利用python简洁易用的特性开发效率较高。缺点就是部署文件夹比较大并且代码的安全性版权要比C等弱一些。