本文来自博客专栏《Python》

本专栏专注于Python项目实战开发应用

初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试有一定帮助,项目演示效果如下:

1、导入库文件

这里主要使用PySimpleGUI、cv2和numpy库文件,PySimpleGUI库文件实现GUI可视化,cv2库文件是Python的OpenCV接口文件,numpy库文件实现数值的转换和运算,均可通过pip导入。

import PySimpleGUI as sg  #pip install pysimpleguiimport cv2  #pip install opencv-pythonimport numpy as np #pip install numpy

2、设计GUI

基于PySimpleGUI库文件实现GUI设计,本项目界面设计较为简单,设计800X400尺寸大小的框图,浅绿色背景,主要由摄像头界面区域和控制按钮区域两部分组成。效果如下所示:

GUI代码如下所示:

#背景色    sg.theme('LightGreen')#定义窗口布局    layout = [      [sg.Image(filename='', key='image')],      [sg.Radio('None', 'Radio', True, size=(10, 1))],      [sg.Radio('threshold', 'Radio', size=(10, 1), key='thresh'),       sg.Slider((0, 255), 128, 1, orientation='h', size=(40, 15), key='thresh_slider')],      [sg.Radio('canny', 'Radio', size=(10, 1), key='canny'),       sg.Slider((0, 255), 128, 1, orientation='h', size=(20, 15), key='canny_slider_a'),       sg.Slider((0, 255), 128, 1, orientation='h', size=(20, 15), key='canny_slider_b')],      [sg.Radio('contour', 'Radio', size=(10, 1), key='contour'),       sg.Slider((0, 255), 128, 1, orientation='h', size=(20, 15), key='contour_slider'),       sg.Slider((0, 255), 80, 1, orientation='h', size=(20, 15), key='base_slider')],      [sg.Radio('blur', 'Radio', size=(10, 1), key='blur'),       sg.Slider((1, 11), 1, 1, orientation='h', size=(40, 15), key='blur_slider')],      [sg.Radio('hue', 'Radio', size=(10, 1), key='hue'),       sg.Slider((0, 225), 0, 1, orientation='h', size=(40, 15), key='hue_slider')],      [sg.Radio('enhance', 'Radio', size=(10, 1), key='enhance'),       sg.Slider((1, 255), 128, 1, orientation='h', size=(40, 15), key='enhance_slider')],      [sg.Button('Exit', size=(10, 1))]    ]#窗口设计    window = sg.Window('OpenCV实时图像处理',               layout,               location=(800, 400),               finalize=True)

3、调用摄像头

打开电脑内置摄像头,将数据显示在GUI界面上,效果如下所示:

代码如下所示:

4、实时图像处理

4.1、阈值二值化

进行阈值二值化操作,大于阈值values['thresh_slider']的,使用255表示,小于阈值values['thresh_slider']的,使用0表示,效果如下所示:

代码如下所示:

if values['thresh']:    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)[:, :, 0]    frame = cv2.threshold(frame, values['thresh_slider'], 255, cv2.THRESH_BINARY)[1]

4.2、边缘检测

进行边缘检测,values['canny_slider_a']表示最小阈值,values['canny_slider_b']表示最大阈值,效果如下所示:

代码如下所示:

if values['canny']:    frame = cv2.Canny(frame, values['canny_slider_a'], values['canny_slider_b'])

4.3、轮廓检测

轮廓检测是形状分析和物体检测和识别的有用工具,连接所有连续点(沿着边界)的曲线,具有相同的颜色或强度,效果如下所示:

代码如下所示:

if values['contour']:    hue = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)    hue = cv2.GaussianBlur(hue, (21, 21), 1)    hue = cv2.inRange(hue, np.array([values['contour_slider'], values['base_slider'], 40]),                      np.array([values['contour_slider'] + 30, 255, 220]))    cnts= cv2.findContours(hue, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]    cv2.drawContours(frame, cnts, -1, (0, 0, 255), 2)

4.4、高斯滤波

进行高斯滤波,(21, 21)表示高斯矩阵的长与宽都是21,标准差取values['blur_slider'],效果如下所示:

代码如下所示:

if values['blur']:    frame = cv2.GaussianBlur(frame, (21, 21), values['blur_slider'])

4.5、色彩转换

色彩空间的转化,HSV转换为BGR,效果如下所示:

代码如下所示:

if values['hue']:    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)    frame[:, :, 0] += int(values['hue_slider'])    frame = cv2.cvtColor(frame, cv2.COLOR_HSV2BGR)

4.6、调节对比度

增强对比度,使图像中的细节看起来更加清晰,效果如下所示:

代码如下所示:

if values['enhance']:    enh_val = values['enhance_slider'] / 40    clahe = cv2.createCLAHE(clipLimit=enh_val, tileGridSize=(8, 8))    lab = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)    lab[:, :, 0] = clahe.apply(lab[:, :, 0])    frame = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)

5、退出系统

直接break即可跳出循环。

if event == 'Exit' or event is None:    break

本文来自博客专栏《Python》

扫码订阅专栏

专栏介绍以及亮点

本专栏主要介绍Python项目实战开发应用,实际教程聚焦于功能,覆盖了基本的创建应用、构建和封装库。实例丰富,大量的技巧提示与图文解析,和详细的代码注解,帮助学习者快速领悟Python编程思想和掌握Python编程的核心知识,全面提升学习者学习Python语言在不同领域的实战应用技能。


如果你想学习Python项目实战开发应用

订阅这个专栏准没错

别犹豫

快扫码订阅专栏

38篇原创博文等你来看↓↓↓

戳这里,解锁38篇原创博文

50 行代码,看 Python + OpenCV 玩转实时图像处理!相关推荐

  1. python爬虫实战:利用scrapy,短短50行代码下载整站短视频

    近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题 ...

  2. 【Python】50行代码带你背单词,四六级冲冲冲

    前言 很快就要到六月份的英语四级考试了,你们都准备好了吗?听说很多小伙伴还在背单词,在我看来,背单 词真的是很难坚持的一件事.今天,就用Python给大家分享一个背单词神奇,一边学还能一边玩,这可 把 ...

  3. python跑酷游戏源码_HTML5游戏实战(1):50行代码实现正面跑酷游戏

    前段时间看到一个"熊来了"的HTML5跑酷游戏,它是一个典型的正面2D跑酷游戏,这里借用它来介绍一下用Gamebuilder+CanTK开发正面跑酷游戏的基本方法. CanTK(C ...

  4. 50行代码实现的艺术签名设计微信小程序,轻松对接公众号,涨粉神器,学习赚钱两不误.微信公众号引流工具.html,python学习小项目.艺术签名设计微信小程序,前端学习小项目有趣的项目

    50行代码实现的艺术签名设计微信小程序,轻松对接公众号,涨粉神器,学习赚钱两不误 先看效果 这个小程序实现艺术签名设计的功能 对接到公众号之后,相当于给你的公众号添加了一个功能,别人关注公众号后,可以 ...

  5. python pyquery不规则数据的抓取_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...

    爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...

  6. python实现50行代码_50行代码实现python计算器主要功能

    实现功能:计算带有括号和四则运算的式子 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 基本思路:使用正则表达式提取出每一层小括 ...

  7. abaqus画一个球 python_简单几步,100行代码用Python画一个蝙蝠侠的logo

    蝙蝠侠作为DC漫画的核心人物之一,一直都受到广大粉丝的喜爱,而笔者作为DC的铁杆粉丝,自然也是老爷(粉丝对蝙蝠侠的昵称)的支持者.今天,笔者就用Python来画一个蝙蝠侠的logo,大概就是下图这个样 ...

  8. python心得体会200字_50行代码让python自动生成文章

    不知道从小到大,我们被迫写了多少心得体会,多少人生感想,如果真情实地的去感受写作然后成长当然很好,但是更多的都是形式主义的需求,并没有人去看里面的内容,白白浪费我们多少大好时光,有时候我们ctrl,C ...

  9. python自动化写作_50行代码让python自动生成文章

    不知道从小到大,我们被迫写了多少心得体会,多少人生感想,如果真情实地的去感受写作然后成长当然很好,但是更多的都是形式主义的需求,并没有人去看里面的内容,白白浪费我们多少大好时光,有时候我们ctrl,C ...

最新文章

  1. Phpstorm 9 关闭拼写检查
  2. iOS 代理设计模式
  3. imutils用法总结
  4. 一文了解自然语言处理神经史(上)
  5. php猴子找大王算法,教程方法;php实现猴子选大王问题算法实例电脑技巧-琪琪词资源网...
  6. Linux中的rz和sz命令
  7. CES 2018 七大看点前瞻:模块化电视、枪型游戏设备……
  8. 大数据时代激活数据管理新思路
  9. python怎么一次输入两个数_python如何一次性输入多个数
  10. 基于Easyui框架的datagrid绑定数据,新增,修改,删除方法(一)
  11. android sdk模拟器中文版,安卓sdk自带模拟器的使用
  12. 免费虚拟化OVM-V1.6发布,新增虚拟机裸设备映射
  13. PHP开发规范——转自ThinkPHP手册
  14. revit二次开发之程序调试
  15. 四种形态图解_波浪理论:调整浪的四种形态(图解)
  16. 点点滴滴自学PS(一)批量去水印
  17. 使用c++实现复数类的运算
  18. 红细胞膜包裹载抗癌药的PLGA纳米载体/聚多巴胺涂覆载药plga材料(生物偶联)
  19. 软件测试未来主要发展的5个趋势
  20. 计算机网络教程的总结

热门文章

  1. 第二章 ELKstack部署及配置
  2. Android 使用Webview时,有时抛 java.lang.Throwable: EventHub.removeMessages(int what = 107) warning...
  3. DucleBox | A Game Engine for OpenGL Programming
  4. 网上论坛生成测试数据方法(抢分利器)
  5. android studio 继承关系 快捷键,Android Studio快捷键
  6. nn.softmax的参数使用和数据使用
  7. Linux操作汇总(常用命令、vim)
  8. 查找——顺序、二分法、斐波那契、插值、分块
  9. 对天气数据进行简单的数据分析
  10. python中的random模块_Python中的random模块