50 行代码,看 Python + OpenCV 玩转实时图像处理!
本文来自博客专栏《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 玩转实时图像处理!相关推荐
- python爬虫实战:利用scrapy,短短50行代码下载整站短视频
近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题 ...
- 【Python】50行代码带你背单词,四六级冲冲冲
前言 很快就要到六月份的英语四级考试了,你们都准备好了吗?听说很多小伙伴还在背单词,在我看来,背单 词真的是很难坚持的一件事.今天,就用Python给大家分享一个背单词神奇,一边学还能一边玩,这可 把 ...
- python跑酷游戏源码_HTML5游戏实战(1):50行代码实现正面跑酷游戏
前段时间看到一个"熊来了"的HTML5跑酷游戏,它是一个典型的正面2D跑酷游戏,这里借用它来介绍一下用Gamebuilder+CanTK开发正面跑酷游戏的基本方法. CanTK(C ...
- 50行代码实现的艺术签名设计微信小程序,轻松对接公众号,涨粉神器,学习赚钱两不误.微信公众号引流工具.html,python学习小项目.艺术签名设计微信小程序,前端学习小项目有趣的项目
50行代码实现的艺术签名设计微信小程序,轻松对接公众号,涨粉神器,学习赚钱两不误 先看效果 这个小程序实现艺术签名设计的功能 对接到公众号之后,相当于给你的公众号添加了一个功能,别人关注公众号后,可以 ...
- python pyquery不规则数据的抓取_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...
爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...
- python实现50行代码_50行代码实现python计算器主要功能
实现功能:计算带有括号和四则运算的式子 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 基本思路:使用正则表达式提取出每一层小括 ...
- abaqus画一个球 python_简单几步,100行代码用Python画一个蝙蝠侠的logo
蝙蝠侠作为DC漫画的核心人物之一,一直都受到广大粉丝的喜爱,而笔者作为DC的铁杆粉丝,自然也是老爷(粉丝对蝙蝠侠的昵称)的支持者.今天,笔者就用Python来画一个蝙蝠侠的logo,大概就是下图这个样 ...
- python心得体会200字_50行代码让python自动生成文章
不知道从小到大,我们被迫写了多少心得体会,多少人生感想,如果真情实地的去感受写作然后成长当然很好,但是更多的都是形式主义的需求,并没有人去看里面的内容,白白浪费我们多少大好时光,有时候我们ctrl,C ...
- python自动化写作_50行代码让python自动生成文章
不知道从小到大,我们被迫写了多少心得体会,多少人生感想,如果真情实地的去感受写作然后成长当然很好,但是更多的都是形式主义的需求,并没有人去看里面的内容,白白浪费我们多少大好时光,有时候我们ctrl,C ...
最新文章
- Phpstorm 9 关闭拼写检查
- iOS 代理设计模式
- imutils用法总结
- 一文了解自然语言处理神经史(上)
- php猴子找大王算法,教程方法;php实现猴子选大王问题算法实例电脑技巧-琪琪词资源网...
- Linux中的rz和sz命令
- CES 2018 七大看点前瞻:模块化电视、枪型游戏设备……
- 大数据时代激活数据管理新思路
- python怎么一次输入两个数_python如何一次性输入多个数
- 基于Easyui框架的datagrid绑定数据,新增,修改,删除方法(一)
- android sdk模拟器中文版,安卓sdk自带模拟器的使用
- 免费虚拟化OVM-V1.6发布,新增虚拟机裸设备映射
- PHP开发规范——转自ThinkPHP手册
- revit二次开发之程序调试
- 四种形态图解_波浪理论:调整浪的四种形态(图解)
- 点点滴滴自学PS(一)批量去水印
- 使用c++实现复数类的运算
- 红细胞膜包裹载抗癌药的PLGA纳米载体/聚多巴胺涂覆载药plga材料(生物偶联)
- 软件测试未来主要发展的5个趋势
- 计算机网络教程的总结
热门文章
- 第二章 ELKstack部署及配置
- Android 使用Webview时,有时抛 java.lang.Throwable: EventHub.removeMessages(int what = 107) warning...
- DucleBox | A Game Engine for OpenGL Programming
- 网上论坛生成测试数据方法(抢分利器)
- android studio 继承关系 快捷键,Android Studio快捷键
- nn.softmax的参数使用和数据使用
- Linux操作汇总(常用命令、vim)
- 查找——顺序、二分法、斐波那契、插值、分块
- 对天气数据进行简单的数据分析
- python中的random模块_Python中的random模块