《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现

本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。同时,希望观看本专栏的小伙伴可以理解到OpenCv进行图像处理的强大哦,如有转载,请注明出处(原文链接和作者署名),感谢各位小伙伴啦!

前文参考:
《OpenCv视觉之眼》Python图像处理一 :Opencv-python的简介及Python环境搭建
《OpenCv视觉之眼》Python图像处理二 :Opencv图像读取、显示、保存基本函数原型及使用
《OpenCv视觉之眼》Python图像处理三 :Opencv图像属性、ROI区域获取及通道处理
《OpenCv视觉之眼》Python图像处理四 :Opencv图像灰度处理的四种方法及原理
《OpenCv视觉之眼》Python图像处理五 :Opencv图像去噪处理之均值滤波、方框滤波、中值滤波和高斯滤波
《OpenCv视觉之眼》Python图像处理六 :Opencv图像傅里叶变换和傅里叶逆变换原理及实现
《OpenCv视觉之眼》Python图像处理七 :Opencv图像处理之高通滤波和低通滤波原理及构造
《OpenCv视觉之眼》Python图像处理八 :Opencv图像处理之图像阈值化处理原理及函数
《OpenCv视觉之眼》Python图像处理九 :Opencv图像形态学处理之图像腐蚀与膨胀原理及方法
《OpenCv视觉之眼》Python图像处理十 :Opencv图像形态学处理之开运算、闭运算和梯度运算原理及方法
《OpenCv视觉之眼》Python图像处理十一 :Opencv图像形态学处理之顶帽运算与黑帽运算
《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法
《OpenCv视觉之眼》Python图像处理十三 :Opencv图像轮廓提取之基于二阶导数的Laplacian算法和LOG算法
《OpenCv视觉之眼》Python图像处理十四 :Opencv图像轮廓提取之Scharr算法和Canny算法
《OpenCv视觉之眼》Python图像处理十五 :Opencv图像处理之图像缩放、旋转和平移原理及实现
《OpenCv视觉之眼》Python图像处理十六:Opencv项目实战之图像中的硬币检测
《OpenCv视觉之眼》Python图像处理十七:Opencv图像处理实战二之图像中的物体识别并截取
《OpenCv视觉之眼》Python图像处理十八:Opencv图像处理实战三之基于OpenCV训练模型的AI人脸检测
《OpenCv视觉之眼》Python图像处理十九:Opencv图像处理实战四之通过OpenCV进行人脸口罩模型训练并进行口罩检测
《OpenCv视觉之眼》Python图像处理二十:Opencv图像美化处理之图像流年、光照、浮雕、素描、怀旧、滤镜、毛玻璃、油漆特效处理
《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理
《OpenCv视觉之眼》Python图像处理二十二:Opencv图像处理实战五之图像中直线和圆的检测原理及实现

对于《OpenCV视觉之眼》专栏,前前后后将了二十二章的相关知识;讲到这里,对于OpenCV的相关知识差不多就结束了,本次博客,是对前面学习的知识做的一个总结和合集,相当于期末的大作业形式,综合前面所学习,所讲到的知识,另外结合一点pyqt5界面设计的新的知识,对OpenCV图像处理做一个全面概括和总结,实现对图像的一系列操作。

因此,Python图像处理二十三章将作为《OpenCV视觉之眼》专栏系列的最终章,如果前面对相关知识不熟悉的建议找到对应的章节进行原理和方法的学习,如果已经熟悉,那么可以直接阅读最终项目合集,一起来看吧!

[Python图像处理二十三]:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现

  • 一、OpenCV图像处理最终章环境搭建
    • 1、Pycharm下载及安装
    • 2、Pycharm环境配置
    • 3、本项目需要下载的库
  • 二、OpenCV图像处理界面设计
    • 1、回忆有哪些图像处理操作?
    • 2、图像处理的目的是什么?
    • 3、图像处理可视化界面一览
  • 三、OpenCV图像处理功能实现
    • 1、功能函数的编写
    • 2、按钮的事件绑定
    • 3、PyQt5的文件打开与保存
    • 4、OpenCV图像处理最终章项目下载地址

一、OpenCV图像处理最终章环境搭建

对于OpenCV图像处理的集成,在JupyterNotebook上面已经不再适合操作,因为我们需要在完成功能的基础上融合界面的设计;因此,最终的项目林君学长选择在Pycharm上面完成,实现界面与功能的完美实现及融合;选择Pycharm也是有原因的,因为它可以为该项目创建一个单独的python环境,需要什么库就为该项目创建什么库,不会有冗余;同时也方便界面设计操作。

注意:下面的操作,林君学长假设大家在windows上已经安装好Python环境,如果Python环境没有安装的,建议回到上面前文参考一览,点击Python图像处理一,进行Python环境的搭建!

1、Pycharm下载及安装

提示:如果pycharm已经下载并且安装好,并且懂得环境配置,那么请通过目录直接跳过1和2两部,直接到第三步骤,查看本项目需要下载的库

1)、通过下面Pychram的官网下载地址,下载你觉得舒服的版本的Pycharm,对于开发人员来讲,如果经济实力允许,请下载专业版然后购买;如果经济实力有困难,建议选择社区版本,免费开源的
Pychram官网下载地址
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第1张图片
2)、双击打开 pycharm 安装包出现如下界面,点击 Next
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第2张图片
3)、先选择安装路径(注意不要出现中文路径,且要记住路径),然后点击 Next 继续
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第3张图片
4)、勾选 64-bit launcher,点击 Next 下一步
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第4张图片
5)、点击 Install 进行安装
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第5张图片
6)、安装过程如图所示
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第6张图片
7)、完成安装如图,点击Finish 结束
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第7张图片

2、Pycharm环境配置

1)、1.双击桌面 pycharm 图标,打开软件,如图所示,进行勾选 I confirm ,然后点击 Continue
下一步
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第8张图片
2)、点击 Don’t Send
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第9张图片
3)、进行默认设置即可,点击 Skip
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第10张图片
4)、点击软件右下角的 Configure,选中第一个 Settings 进行点击
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第11张图片
5)、出现如下图界面,在左边找到 Project Interpreter 点击
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第12张图片
6)、点击右侧齿轮,如下图所示,然后在弹出的选择菜单中选择 Add 进行点击
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第13张图片
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第14张图片

7)、在窗口中选择 Virtualenv Environment,点击 New environment,然后在 location 栏中删
除之前的内容,复制路径(D:\Program Files\Python\venv_py37_qt5_cv4_tf2)粘贴进
location 栏中,如图所示,最后点击 OK
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第15张图片
上面3所选择的路径位置为为项目存放的独立python环境的位置
8)、等待加载完成,点击右侧的+号按钮
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第16张图片
9)、点击下方的 Manage Repositories
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第17张图片
10)、修改源地址,点击窗口右边的编辑 Eidt 按钮,在弹出的窗体中修改为新的源
地址(https://pypi.tuna.tsinghua.edu.cn/simple),如图所示。点击 OK 按钮,回到上层
再点击 OK 按钮
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第18张图片
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第19张图片
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第20张图片
建议添加清华源和豆瓣源两个源,豆瓣源:https://pypi.doubanio.com/simple/
11)、点击如图所示的更新按钮进行更新,完成后会在每个包名后出现一个地址
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第21张图片
到这里,环境配置完成!

3、本项目需要下载的库

1)、下载pyqt5界面设计库及其工具库,在搜索栏中输入 pyqt5-tools,在列表框中选择同名对应的一项,选中后在左下角点击 Install Package
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第22张图片
安装过程如下图所示,注意:有些时候可能没有中间的窗口,通过查看如图框出的标识
的转动的圆圈也说明正在下载安装。
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第23张图片
安装成功如下图所示,如果没有出现下图的 Package xxx installed successfully,说明安
装出错,重复执行 13 步骤进行安装(多次重复后如果不行,过段时间再试)
在这里插入图片描述
2)、其他下载库的方法和上面方法一样,这里给出本项目需要库一览表

  • opencv-python
  • PyQt5
  • pyqt5-tools
  • pyuic5-tool
  • matplotlib
  • math
  • numpy

二、OpenCV图像处理界面设计

该项目的界面设计主要通过PyQt5来实现,通过qt的界面设计,最后通过功能库转为py文件,就可以使用了,转换库为上面我们下载的pyuic5,转换方法为终端输入:pyuic5 xx.ui -o xx.py

1、回忆有哪些图像处理操作?

既然需要进行界面设计,那么首先我们应该回想的是对图像进行操作需要有哪些功能?怎么实现?当然,一般的方法就是每个功能对应一个按钮,通过点击按钮进行实现啦,这也是这次项目的整体构想,那么有哪些功能呢?一起回忆一下《OpenCV视觉之眼》前面所学习到的知识吧,大致可分为以下四个方面:
1)、对图像的基本操作
图像的读取、保存、显示、灰度处理
2)、处理图像的基本步骤
图像的灰度处理、低通高通滤波去噪、图像泛洪处理、图像中值、均值、高斯、方框滤波处理、图像阈值化处理、图像形态学处理(包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算、黑帽运算)、图像轮廓提取
3)、图像中物体检测
图像中硬币检测、图像直线和圆的检测、图像中物体的检测和识别
4)、图像特效处理
图像各种特效处理包括:素描、滤镜、毛玻璃、流年、油漆、怀旧、浮雕、缩放、旋转、马赛克、光照等
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第24张图片

因此,以上功能我们可以通过按钮设置如下:

2、图像处理的目的是什么?

那么图像处理的目的是什么呢?当然是通过读取一张图像,处理到我们想要的样子然后对处理之后的图像进行保存,最后展示啦。因此,我们的需求如下
1)、需要一个读取本地图像的按钮,和用于展示图像的框,如下:
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第25张图片
2)、需要一个保存图像的功能,并有一个框用来展示处理之后图像的效果;如下:
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第26张图片
3)、需要一个进度条,用来展示图像的处理过程速度,让我们知道图像处理到哪一步了,如下:
在这里插入图片描述
那么以上就是我们本项目最终的目的了,读取图像,处理图像、保存图像

3、图像处理可视化界面一览

该项目整体的界面设计如下所示:
《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第27张图片

三、OpenCV图像处理功能实现

1、功能函数的编写

对于各个功能函数的编写,在之前的章节中林君学长都通过原理编写过相关的程序,大家可以直接使用哪个,当然也可以自己根据原理进行书写,完成相关操作;本次项目与之前不同的是,每个py文件中林君学长都通过class类进行创建,也就是说,在类中的函数需要通过self调用,表示属于该类中的本身变量和函数;具体请到第四步,OpenCV图像处理最终章项目下载地址进行该项目下载运行查看完整代码!这里给出一个功能函数的编写,如下所示:包括进程的调用,进度条的使用、异常处理等

    def imageTogray(self):#通过原理实现灰度处理
        try:
            self.label_2.setScaledContents(True)
            img = cv2.imread(self.path)
            img = cv2.resize(img, (240, 240), interpolation=cv2.INTER_CUBIC)
            height, width = img.shape[:2]
            gray = np.zeros((height, width, 1), dtype="uint8")
            self.create_thread()
            for i in range(height):
                for j in range(width):
                    gray[i][j]=img[i][j][0]*0.114+img[i][j][1]*0.587+img[i][j][2]*0.299 #加权值法
                    #gray[i][j] = (img[i][j][0] +img[i][j][1]+img[i][j][2])/3#平均值法
                    #gray[i][j] = max(img[i][j][0],img[i][j][1],img[i][j][2]) #最大值法
                if i % int(height /100) == 0:
                    self.detectThread.timerEvent()
            self.detectThread.quit()
            height, width = gray.shape[:2]
            qimg = QImage(gray, width, height, QImage.Format_Grayscale8)
            qpix = QPixmap.fromImage(qimg)
            self.label_2.setPixmap(qpix)
        except:
            QMessageBox.about(self, "提示", "请先选择图片!")

《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第28张图片

2、按钮的事件绑定

1)、对于按钮事件的绑定,当然是官方操作方法,具体按钮的事件绑定操作如下代码所示:

self.pushButton.clicked.connect(self.openImage)
self.pushButton_2.clicked.connect(self.imageTogray) #灰度
self.pushButton_3.clicked.connect(self.Sketch)   #素描
self.pushButton_4.clicked.connect(self.Nostalgia) #怀旧
self.pushButton_5.clicked.connect(self.paint) #油漆

3、PyQt5的文件打开与保存

1)、文件打开功能实现
PyQt5中提供了打开本地文件夹的函数,我们可以直接通过该函数进行打开本地文件夹进行图像读取,如下代码所示:

self.path,ret=QFileDialog.getOpenFileName(self,"打开图片",".","图片格式(*.jpg)")

《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第29张图片

2)、文件保存功能实现
同样的,PyQt5中也提供了打开本地文件夹进行保存的函数,我们可以直接通过该函数进行打开本地文件夹进行图像保存,如下代码所示:

path, ret = QFileDialog.getSaveFileName(self, "选择保存文件路径", ".", "图片格式(*.jpg)")

《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第30张图片

4、OpenCV图像处理最终章项目下载地址

该项目中的函数不用过多的解释,而对于该界面的设计,总体用PyQt5进行对应的布局,因此,可通过以下地址下载林君学长的源码进行参考,下载地址如下所示:
https://download.csdn.net/download/qq_42451251/12745214

《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现_第31张图片
《OpenCV视觉之眼》专栏的图像处理知识讲解到此结束,希望OpenCV-Python对图像处理的这二十三章可以对学弟学妹们学习OpenCV图像处理有一定的帮助,同时,也希望《OpenCV视觉之眼》的这二十三章能够吸引到你们学习的兴趣,重视OpenCV对图像的处理原理,理解OpenCV官方库函数的基本使用方法,奠定你图像学的基础!

《OpenCV视觉之眼》系列教程到此结束,但林君学长的博客教程系列还有很长的路要走,还需要学习和书写的教程很多,人工智能、嵌入式、网络安全、web前端等等等等;总之,这是林君学长第一次写由浅入深的学习教程,但承诺不会是最后一次^ _ ^

以上就是本次博客的全部内容,遇到问题的小伙伴记得留言评论,学长看到会为大家进行解答的,这个学长不太冷!

人生逆境时,切记忍耐;人生顺境时,切记收敛;人生得意时,切记看淡;人生失意时,切记随缘。心情不好时,当需涵养;心情愉悦时,当需沉潜

陈一月的又一天编程岁月^ _ ^

你可能感兴趣的:(Opencv视觉之眼)