欢迎关注『OpenCV-PyQT项目实战 @ Youcans』系列,持续更新中
OpenCV-PyQT项目实战(1)安装与环境配置
OpenCV-PyQT项目实战(2)QtDesigner 和 PyUIC 快速入门
OpenCV-PyQT项目实战(3)信号与槽机制
OpenCV-PyQT项目实战(4)OpenCV 与PyQt的图像转换
OpenCV-PyQT项目实战(5)项目案例01:图像模糊
OpenCV-PyQT项目实战(6)项目案例02:滚动条应用
OpenCV-PyQT项目实战(7)项目案例03:鼠标框选
OpenCV-PyQT项目实战(8)项目案例04:鼠标定位
OpenCV-PyQT项目实战(9)项目案例04:视频播放
OpenCV-PyQT项目实战(10)项目案例06:键盘事件与视频抓拍
OpenCV-PyQT项目实战(11)项目案例07:摄像头操作与拍摄视频
文章目录
1. PyQt5 图形界面开发工具
1.1 从 CLI 到 GUI
CLI:命令行用户接口,Command Line User Interface。
GUI:图形用户界面,Graphical User Interface。
1.2 PyQt5 开发工具
Qt 库是跨平台的 C++ 库的集合,是最强大的 GUI 库之一,可以实现高级 API 来访问桌面和移动系统的各种服务。
PyQt5 是一套 Python 绑定 Digia QT5 应用的框架。PyQt5 实现了一个 Python模块集,有 620 个类,6000 个函数和方法。
PyQt5 的优点:简单好用,功能强大, 跨平台支持,文档齐全,稳定性高,生态支持,开源免费。
2. 安装 PyQt5 和 QtTools
2.1 安装 Anaconda3
2.2 安装 PyCharm,配置运行环境
2.3 pip 安装 PyQt5
pip install pyqt5 -i https://mirrors.aliuyun.com/pypi/simple
安装了 PyQt5 就可以用 Python 语言编写 Qt 程序。
确实可以,网上有很多相关的教程,我也学习和编写了几个这样的 GUI。
例如,可以用一个简单的例程,检测 PyQt5 的安装是否成功。
# OpenCVPyqt01.py
# Demo1 of GUI by PyQt5
# Copyright 2023 Youcans, XUPT
# Crated:2023-01-25
import sys
from PyQt5 import QtWidgets
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv) # 初始化界面
mainWin = QtWidgets.QWidget() # 生成主窗口
mainWin.resize(360, 360) # 设置主窗口尺寸
mainWin.setWindowTitle("OpenCV-Pyqt")
mainWin.show() # 显示主窗口
sys.exit(app.exec_()) # 在主线程中退出
运行程序 GUIdemo1,将弹出如下的图形界面:
2.4 pip 安装 QtTools
虽然安装 PyQt5 就可以编程实现 GUI,但是学习、编程、调试、修改都是相当复杂和繁琐的。而 Qt Designer 基本是通过人机交互的排版方式进行界面设计,非常方便、直观。所以我在使用 Qt Designer 图形界面设计工具之后,就再也不愿意编写 Python 程序来实现 GUI 了。
Qt Tools 包含了两个重要的工具:
- 图形界面设计工具 Qt Designer,用于设计图形界面,生成 .ui文件,以 xml 格式存储界面和控件的属性;
- UI 文件转换工具 PyUic,用于将 .ui 文件解析为 .py 文件的工具。
Qt Tools 工具可以直接使用 pip 方式安装:
pip install pyqt5-tools -i https://mirrors.aliuyun.com/pypi/simple
或:
pip install pyqt5-tools -i https://pypi.douban.com/simple/
3. QtDesigner 和 PyUIC 的环境配置
使用 PyCharm 集成开发工具的小白,在安装 QtTools 库以后,还要对 QtDesigner 和 PyUIC 进行环境配置,将其集成到 PyCharm 中。
3.1 在 PyCharm 添加 Create Tools
- 运行 PyCharm;
- 从顶部菜单栏选择:File -> Settings,弹出 Seetings 窗口;
- 从左侧菜单栏中选择:Tools -> ExternalTools,在右侧点击 “+” 弹出 CreateTool 窗口;
3.2 添加 QtDesigner 工具
在 CreateTool 窗口依次填写:
- Name:填写 “QtDesigner”
- Program:填写 designer.exe 的路径,例如:
C:\Python\Anaconda3\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
注意:此处填写刚才 pip 安装的 pyqt5-tools 工具包的路径。如果小白的 Python 或 Anaconda3 安装在其他路径下,则从对应的目录找到 “qt5_applications\Qt\bin\designer.exe”,或者在资源管理器中搜索 “designer.exe” 文件找到安装路径。
- Arguments:不用填写
- Working directory:填写生成 UI 文件的保存路径
例如,要将 .ui 文件保存在当前 Project 的路径下,则填写 “$ProjectFileDir$”;要将 .ui 文件保存在当前 Project 路径下的 \program 子目录中,则填写 “$ProjectFileDir$\program”。
填好 CreateTool 窗口后,点击 “OK” 即可完成 QtDesigner 工具的添加。
3.3 添加 PyUIC 工具
在 CreateTool 窗口依次填写:
- Name:填写 “PyUIC”
- Program:填写 python.exe 的路径,例如:
C:\Python\Anaconda3\python.exe
注意:此处填写 IDE 使用的 Python Interpreter的路径。如果小白的 Python 或 Anaconda3 安装在其他路径下,或者选择其它路径中的 python.exe 作为 Python Interpreter,可以从 Pycharm -> Settings -> Project -> Python Interpreter 打开配置窗口,从右侧上方 “Python Interpreter:” 选项框找到 python.exe 的路径。
- Arguments:填写"-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py”
- Working directory:填写将 .ui 文件转换为 .py 文件的保存路径
例如,要将 .py 文件保存在当前 Project 的路径下,则填写 “$ProjectFileDir$”;要将 .py 文件保存在当前 Project 路径下的 \program 子目录中,则填写 “$ProjectFileDir$\program”。
填好 CreateTool 窗口后,点击 “OK” 即可完成 QtDesigner 工具的添加。
安装和环境配置完成。
4. 安装 OpenCV-Python
4.1 OpenCV 计算机视觉库
OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉库。
OpenCV 是由英特尔公司发起并参与开发,以 BSD 许可证授权发行,可以在商业和研究领域中免费使用。
OpenCV 可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的 IPP 进行加速处理。
OpenCV 用C++语言编写。主要接口也是C++语言,也提供了大量的 Python、Java、MATLAB、OCTAVE 接口,及对 C#、Ch、Ruby、GO 语言的支持。
OpenCV (https://opencv.org) 官网资源:
- 文件:http://docs.opencv.org/3.4/
- 问答论坛:https://forum.opencv.org
- 以前的论坛(只读):http://answers.opencv.org
- 问题跟踪:https://github.com/opencv/opencv/issues
4.2 pip 安装 OpenCV
(1)下载地址
推荐从清华的镜像下载
https://pypi.tuna.tsinghua.edu.cn/simple/opencv-python/
(2)版本选择
清华镜像中有很多 OpenCV 版本可供下载。关于 Windows/Linux/Mac、amd64 之类的选择就不必多说了,但是 OpenCV 的版本选择确实有两个问题需要注意:
-
OpenCV 3.4.2 及以后版本由于专利许可问题不支持部分功能,因此建议选择 3.4.15 及以前版本。
例如,图像配准、拼接以及融合时的常用算法 Sift、Surf 由于涉及专利在 OpenCV 3.4.2 以后版本采用新的授权方式,通常下载的版本无法调用 cv2.xfeatures2d.SURF_create()。opencv_contrib不仅存放了尚未稳定的代码,同时也存放了涉及专利保护的技术实现。 -
OpenCV 的版本要与安装的 PyCharm 版本匹配。
例如,如果 PyCharm 的版本是较早的 3.x 版本如 cp35,不能与新的 OpenCV 版本匹配,安装时可能报错。
因此要根据自己的 PyCharm 版本选择下载的 OpenCV 版本,例如:opencv_python-3.4.15.55-cp38-cp38-win_amd64.whl
大约 29.7M,下载速度很快。
(3)pip 安装
- 将下载的 .whl 文件保存到容易找到的路径下,例如 “C:\Python”。
- 使用 pip 方式安装下载的 .whl 文件。需要注意的问题:
- 安装路径 使用保存 .whl 文件的路径
- 注意输入 .whl 文件名时 “-”、"_"不要搞错了
- 如下图所示:如果 PyCharm 的版本与 OpenCV 版本不匹配,安装时可能报错
pip install C:\Python\opencv_python-3.4.15.55-cp38-cp38-win_amd64.whl
由于已经将 .whl 文件下载到本地,安装速度很快。
4.3 OpenCV 验证程序
我们编写第一个 OpenCV 验证程序: cvDemo01.py。
# cvDemo01.py
# Demo01 of OpenCV
# Copyright 2023 Youcans, XUPT
# Crated:2023-01-25
import cv2
if __name__ == '__main__':
# 读取图像,支持 bmp、jpg、png、tiff 等常用格式
img = cv2.imread("../images/Fig0301.png") # 读取图像位置
if not img is None: # imgGaia 存在
cv2.imshow("Demo01", img) # 在窗口 Demo01 显示图像
else: # imgLena is None, 读入错误
print("Error in reading image.")
# 释放图像窗口
key = cv2.waitKey(0) # 等待下一个按键命令
cv2.destroyAllWindows() # 释放所有窗口
运行程序 CVdemo01,弹出窗口显示指定路径的图像,就说明 OpenCV 安装成功了。
注意指定路径下要存有该图片,也可以修改路径和文件名来显示其它图片。
5. 基于 PyQt5 的OpenCV图形窗口
在例程 OpenCVPyqt01.py中,我们建立了一个 PyQt5 空白窗口;而在例程cvDemo01.py中,我们使用OpenCV内置的GUI创建了一个窗口,并显示读取的图像。
本节将 PyQt5 与 OpenCV 结合起来,使用 PyQt5 建立交互界面,使用 OpenCV 读取图像,并将 OpenCV 图像显示在 PyQt5 窗口中。这是我们的第一个 基于 PyQt5 的 OpenCV 图形窗口,也是第一个 PyQt5+OpenCV 例程。
# OpenCVPyqt02.py
# Demo02 of GUI by PyQt5
# Copyright 2023 Youcans, XUPT
# Crated:2023-01-25
from PyQt5 import QtWidgets, QtGui
import cv2 as cv
import sys
if __name__ == '__main__':
img = cv.imread("../images/Fig0301.png") # OpenCV 读取图像
qtImg = QtGui.QImage(img.data, img.shape[1], img.shape[0], QtGui.QImage.Format_RGB888).rgbSwapped() # 转为为 PyQt 图像格式
app = QtWidgets.QApplication(sys.argv) # 创建应用程序对象
MainWin = QtWidgets.QWidget()
MainWin.setWindowTitle("OpenCV-Pyqt by youcans")
label = QtWidgets.QLabel() # 创建 label 对象
label.setPixmap((QtGui.QPixmap.fromImage(qtImg))) # 加载 PyQt 图像
layout = QtWidgets.QHBoxLayout()
layout.addWidget(label)
MainWin.setLayout(layout)
# MainWin.resize(600, 480) # 窗口尺寸自适应图片
MainWin.show() # 显示主窗口
sys.exit(app.exec_()) # 在主线程中退出
运行程序 OpenCVPyqt02,弹出如下窗口。
该窗口及显示内容与例程 CVdemo01 创建的窗口类似。但是,上图是由 OpenCV GUI 创建的,由于 OpenCV GUI 的局限性,只能用于简单的图像显示,不适宜处理复杂的交互操作。而本图是基于 PyQt5 创建的 GUI 界面,可以充分利用 PyQt5 的强大功能,实现各种 GUI 操作。
我们将在后续章节一步步丰富和完善这个 PyQt5+OpenCV 模型。
【本节完】
版权声明:
原创作品,转载必须标注原文链接:https://blog.csdn.net/youcans/article/details/128760512
Copyright 2023 youcans, XUPT
Crated:2023-01-25