OpenCV-PyQT项目实战(1)安装与环境配置

news2024/11/16 1:28:29

本系列从零开始实战解说基于 PyQt5 的 OpenCV 项目开发。

欢迎关注『OpenCV-PyQT项目实战 @ Youcans』系列,持续更新中
OpenCV-PyQT项目实战(1)安装与环境配置
OpenCV-PyQT项目实战(2)OpenCV导入图像

文章目录

    • 1. PyQt5 图形界面开发工具
      • 1.1 从 CLI 到 GUI
      • 1.2 PyQt5 开发工具
    • 2. 安装 PyQt5 和 QtTools
      • 2.1 安装 Anaconda3
      • 2.2 安装 PyCharm,配置运行环境
      • 2.3 pip 安装 PyQt5
      • 2.4 pip 安装 QtTools
    • 3. QtDesigner 和 PyUIC 的环境配置
      • 3.1 在 PyCharm 添加 Create Tools
      • 3.2 添加 QtDesigner 工具
      • 3.3 添加 PyUIC 工具
    • 4. 安装 OpenCV-Python
      • 4.1 OpenCV 计算机视觉库
      • 4.2 pip 安装 OpenCV
      • 4.3 OpenCV 验证程序
    • 5. 基于 PyQt5 的OpenCV图形窗口


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


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


欢迎关注『OpenCV-PyQT项目实战 @ Youcans』系列,持续更新中
OpenCV-PyQT项目实战(1)安装与环境配置

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

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

相关文章

初识图像分类——K近邻法(cs231n assignment)

作者:非妃是公主 专栏:《计算机视觉》 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 专栏系列文章 Cannot find reference ‘imread‘ in ‘init.py‘ error: (-209:Sizes of input arguments…

ppt神器islide 第1节 初步接触强大的工具-资源篇

ppt神器islide 第1节 初步接触强大的工具1 PPT大神的课程总结1.1 骨架篇1.2 色彩篇1.3 对齐篇1.4 对比篇1.5 修饰篇1.6 字体篇1.7 素材篇1.8 线条篇1.8.1 可以随意画线条,填充空白1.8.2 在字体上画线条,做成艺术字1.8.3 做对称线条,比如递进三…

[Vulnhub] DC-3

下载链接:DC-3 DC-3需要 把IDE里面的改成IDE 0:0 不然无法打开 知识点: Joomla cms 3.7.0 sql注入漏洞cmseek工具探测cms指纹john解密proc_popen反弹shellpython -m http.server开启http服务 & wget远程下载ubuntu16.0.4 Linux 4.4.0-21 系统漏…

使用OpenAI的Whisper 模型进行语音识别

语音识别是人工智能中的一个领域,它允许计算机理解人类语音并将其转换为文本。该技术用于 Alexa 和各种聊天机器人应用程序等设备。而我们最常见的就是语音转录,语音转录可以语音转换为文字记录或字幕。 wav2vec2、Conformer 和 Hubert 等最先进模型的最…

无穷小的比较——“高等数学”

各位CSDN的uu们你们好呀,今天小雅兰的内容是无穷小的比较,下面,就让我们一起进入高等数学的世界吧 回顾 定义 性质 定理 定理1: 定理2:等价无穷小替换定理 常用的等价无穷小 例题 小结 回顾 两个无穷小的商当然不一定还…

Android深入系统完全讲解(38)

9.6 配置 native 方法 9.6.1 CMakeLists.txt 文件中内容,配置生成一个 so 库add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/native…

一刷代码随想录——数组

概念数组是存放在连续内存空间上的相同类型数据的集合连续:增删需移动后续元素,删除的本质是覆盖类型:相同用数组,不同用结构数组下标从0开始C中二维数组连续分布vector的底层实现是array,严格来讲vector是容器&#x…

C++11 并发指南四( 详解三 stdfuture stdshared_future)

C11 并发指南四( 详解三 std::future & std::shared_future) 文章目录C11 并发指南四( 详解三 std::future & std::shared_future)std::future 介绍std::future 成员函数std::shared_future 介绍std::future_error 介绍其他与 std::future 相关的函数介绍其他与 std::f…

SWIFT Framework .NET 2023.1 Crack

SWIFT 组件 SWIFT Components 多年来一直致力于银行机构软件、在线交易软件、CRM 和零售和商业解决方案中的计费应用程序,以及医药和高度关键任务的 24/7 运营应用程序。作为定制银行解决方案的开发商,SWIFT Components 拥有所有银行产品和部门的专业知识…

【python从零入门 | 03】基本数据类型之“除法“

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专家博主 💊交流社区:CSDN云计算交流社区欢迎您的加入! 目

设置/恢复系统隐藏文件 - Windows系统

设置/恢复系统隐藏文件 - Windows系统前言普通隐藏文件显示文件设置/取消隐藏系统隐藏文件显示文件设置/取消隐藏前言 本文介绍Windows系统如何设置/恢复隐藏文件,隐藏文件包含普通隐藏文件和系统隐藏文件,系统隐藏文件一般是受保护的系统文件&#xff…

Android 蓝牙开发——Avrcp协议(十二)

SDK路径:frameworks/base/core/java/android/bluetooth/ 服务路径:packages/apps/Bluetooth/src/com/android/bluetooth/ 在使用协议类的时候无法找到该类,由于安卓源码中关于蓝牙协议的 Client 部分或相关接口都被 hide 给隐藏掉了&#xf…

【通信原理(含matlab程序)】实验一 双边带模拟调制和解调

💥💥💞💞欢迎来到本博客❤️❤️💥💥 本人持续分享更多关于电子通信专业内容以及嵌入式和单片机的知识,如果大家喜欢,别忘点个赞加个关注哦,让我们一起共同进步~ &#x…

AcWing - 寒假每日一题2023(DAY 11——DAY 15)

文章目录一、AcWing 4656. 技能升级(困难)1. 实现思路2. 实现代码二、AcWing 4454. 未初始化警告(简单)1. 实现思路2. 实现代码三、AcWing 4509. 归一化处理(简单)1. 实现思路2. 实现代码四、AcWing 4699. …

OpenCV实战(8)——直方图详解

OpenCV实战(8)——直方图详解0. 前言1. 直方图概念2. 直方图计算2.1 灰度图像直方图计算2.2 彩色图像直方图计算3. 应用查找表修改图像3.1 查找表3.2 拉伸直方图提高图像对比度3.3 在彩色图像上应用查找表4. 图像直方图均衡化5. 完整代码小结系列链接0. …

操作流程违规作业监测系统 yolov7

操作流程违规作业监测系统通过pythonyolov7网络深度学习技术,对高危场景下作业人员未按照操作流程进行正常操作行为进行实时分析识别检测,发现现场人员违规作业操作行为,不需人为干预,立即自动抓拍存档预警。YOLOv7 在 5 FPS 到 1…

在 VSCode 中像写 TypeScript 一样写 JavaScript

大家好,我是前端西瓜哥。 我们在 VSCode 编辑器中编写 js 代码,是会提供类型提示的。 VSCode 会推断一个变量是什么类型,并在你输入内容的时候,提供对应的 API 属性或方法补全。 如下图,在 js 文件中,ar…

【Java】到底什么是包?|最通俗易懂讲解|保姆级

博主简介:努力学习的预备程序媛一枚~博主主页: 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 目录Part1:类比理解:Part2:与包(package)正式见面:2.1:包的本质--文件夹2.2&…

学习C++基本数值类型

写在前面 正在学习C/C/Javascript,面向初学者撰写专栏 博主原创C/C笔记(干货),如有错误之处请各位读者指正 请读者评论回复、参与投票,反馈给作者,我会获得持续更新各类干货的动力。 致粉丝:可以…

力扣刷题记录——709. 转换成小写字母、771. 宝石与石头、704. 二分查找

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——709. 转换成小写字母、771. 宝石与石头…