Python+OpenCV六种实时图像处理详细讲解

目录
  • 1、导入库文件
  • 2、设计GUI
  • 3、调用摄像头
  • 4、实时图像处理
    • 4.1、阈值二值化
    • 4.2、边缘检测
    • 4.3、轮廓检测
    • 4.4、高斯滤波
    • 4.5、色彩转换
    • 4.6、调节对比度
  • 5、退出系统

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

1、导入库文件

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

import PySimpleGUI as sg  #pip install pysimplegui
import cv2  #pip install opencv-python
import 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界面上,效果如下所示:

代码如下所示:

    #打开内置摄像头
    cap = cv2.VideoCapture(0)
    while True:
        event, values = window.read(timeout=0, timeout_key='timeout')

        #实时读取图像
        ret, frame = cap.read()

        #GUI实时更新
        imgbytes = cv2.imencode('.png', frame)[1].tobytes()
        window['image'].update(data=imgbytes)

    window.close()

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+OpenCV六种实时图像处理详细讲解的详细内容,更多关于Python+OpenCV实时图像处理的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python 深入了解opencv图像分割算法

    使用 OpenCV 函数 cv::filter2D 执行一些拉普拉斯滤波以进行图像锐化 使用 OpenCV 函数 cv::distanceTransform 以获得二值图像的派生(derived)表示,其中每个像素的值被替换为其到最近背景像素的距离 使用 OpenCV 函数 cv::watershed 将图像中的对象与背景隔离 加载源图像并检查它是否加载没有任何问题,然后显示它: # Load the image parser = argparse.ArgumentParser(descript

  • Python 计算机视觉编程进阶之OpenCV 图像锐化及边缘检测

    目录 前言 (1)图像锐化 (2)图像边缘检测 a. 图像边缘 b. 边缘检测 1. 一阶微分算算子.二阶微分算子 2. 读取图像信息 3. Sobel 算子 4. Laplacian 算子 5. Scharr 算子 6. Canny 算子 7. 总结 8. 参考论文 参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起进步!加油!! 前言 (1)图

  • Python+OpenCV 图像边缘检测四种实现方法

    目录 1.Sobel算子 2.Schaar算子(更能体现细节) 3.Laplacian算子(基于零穿越的,二阶导数的0值点) 4.Canny边缘检测(被认为是最优的边缘检测算法) 总结 import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 设置兼容中文 plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = [

  • python opencv图像处理基本操作示例详解

    目录 1.图像基本操作 ①读取图像 ②显示图像 ③视频读取 ④图像截取 ⑤颜色通道提取及还原 ⑥边界填充 ⑦数值计算 ⑧图像融合 2.阈值与平滑处理 ①设定阈值并对图像处理 ②图像平滑-均值滤波 ③图像平滑-方框滤波 ④图像平滑-高斯滤波 ⑤图像平滑-中值滤波 3.图像的形态学处理 ①腐蚀操作 ②膨胀操作 ③开运算和闭运算 4.图像梯度处理 ①梯度运算 ②礼帽与黑帽 ③图像的梯度处理 5.边缘检测 ①Canny边缘检测 1.图像基本操作 ①读取图像 ②显示图像 该函数中,name是显示窗口的名字

  • OpenCV-Python 对图像的基本操作代码

    import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 设置兼容中文 plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ['SimHei'] D:\Anaconda\AZWZ\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: load

  • python计算机视觉opencv图像金字塔轮廓及模板匹配

    目录 1.图像金字塔 ①高斯金字塔 ②拉普拉斯金字塔 2.图像轮廓 ①寻找轮廓 ②轮廓特征 ③轮廓绘制 3.模板匹配 ①模板匹配 ②匹配框线绘制 ③多对象匹配 4.直方图统计 ①直方图绘制 ②直方图统计 ③直方图的mask操作 ④直方图均衡化 5.傅里叶变换 1.图像金字塔 ①高斯金字塔 向下采样,数据会越来越少,减少的方式是:将偶数行和列删除 向上采样,数据会越来越多,将图像在每个方向上扩大为原来的两倍,新增的行和列用0来填充.使用先前同样的内核与放大后的图像卷积,获得近似值. 上采样之后,图

  • Python OpenCV对图像进行模糊处理详解流程

    其实我们平时在深度学习中所说的卷积操作,在 opencv 中也可以进行,或者说是类似操作.那么它是什么操作呢?它就是图像的模糊(滤波)处理. 均值滤波 使用 opencv 中的cv2.blur(src, ksize)函数.其参数说明是: src: 原图像 ksize: 模糊核大小 原理:它只取内核区域下所有像素的平均值并替换中心元素.3x3 标准化的盒式过滤器如下所示: 特征:核中区域贡献率相同. 作用:对于椒盐噪声的滤除效果比较好. # -*-coding:utf-8-*- ""&q

  • Python+OpenCV六种实时图像处理详细讲解

    目录 1.导入库文件 2.设计GUI 3.调用摄像头 4.实时图像处理 4.1.阈值二值化 4.2.边缘检测 4.3.轮廓检测 4.4.高斯滤波 4.5.色彩转换 4.6.调节对比度 5.退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数.滤波处理.阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参.测试有一定帮助. 1.导入库文件 这里主要使用PySimpleGUI.cv2和numpy库文件,PySimpleGUI库文件实现

  • Python+OpenCV实现实时眼动追踪的示例代码

    使用Python+OpenCV实现实时眼动追踪,不需要高端硬件简单摄像头即可实现,效果图如下所示. 项目演示参见:https://www.bilibili.com/video/av75181965/ 项目主程序如下: import sys import cv2 import numpy as np import process from PyQt5.QtCore import QTimer from PyQt5.QtWidgets import QApplication, QMainWindow

  • Python中性能分析利器pyinstrument详细讲解

    目录 一.前言 二.Pyinstrument使用 三.Pyinstrument与cProfile(python自带性能分析器)的不同 总结 一.前言 程序的性能也是非常关键的指标,很多时候你的代码跑的快,更能够体现你的技术.最近发现很多小伙伴在性能分析的过程中都是手动打印运行时间的方式来统计代码耗时的: import datetime start=datetime.datetime.now() b=[i for i in range(10000000)] # 生成长度为一千万的列表 end=da

  • Python OpenCV实现姿态识别的详细代码

    目录 前言 环境安装 下载并安装Anaconda 安装JupyterNotebook 生成JupyterNotebook项目目录 下载训练库 单张图片识别 导入库 加载训练模型 初始化 载入图片 显示图片 调整图片颜色 姿态识别 视频识别 实时摄像头识别 参考 前言 想要使用摄像头实现一个多人姿态识别 环境安装 下载并安装 Anaconda 官网连接 https://anaconda.cloud/installers 安装 Jupyter Notebook 检查Jupyter Notebook是

  • Python模块介绍与使用详细讲解

    模块的相关概念 1. 什么是模块 模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块 模块的英文名叫: modules,一个模块中可以包含N个函数,也可以包含类等等. 在Python中一个扩展名为.py的文件就是一个模块. 2. 使用模块的好处 方便其他程序和脚本的导入并使用 避免函数名和变量的冲突 提高代码的可维护性 提高代码的可重用性 模块的使用 1. 自定义模块 创建一个.py文件,名称尽量不要与Python自带的标准模块名称相同,需要见名知意. a) 方法一

  • 基于python编写的shell脚本详细讲解

    今天同事叫我编写一个shell脚本.话说,虽然我受*nix的影响甚深,但是对于*nix 里随处可见的sh脚本却是讨厌之极.为什么讨厌呢?首先是因为sh脚本那莫名其妙的语法,感觉就像随写随扔的程序,完全没有任何美感可言.其次是sh脚本的处理能力还是比较弱的,在文本处理.XML处理还有网络编程方面,基本上都要借助于perl,awk等一堆程序.我对这些程序也是不大喜欢的,况且学习第三方软件总要时间,还不如都用python好了. 那,python可以做shell脚本吗? 首先介绍一个函数: os.sys

  • python文件操作的基础详细讲解(write、read、readlines、readline)

    目录 前言 1 文件操作 1.1 文件打开与关闭 1.1.1 打开文件 1.1.2 关闭文件 2 文件读写 2.1 写数据(write) 2.2 读数据(read) 2.3 读数据(readlines) 2.3 读数据(readline) 3 文件的相关操作 3.1 文件重命名 3.2 删除文件 3.3 创建文件夹 3.4 获取当前目录 3.5 改变默认目录 补充:文件综合操作实例 总结 前言 python 文件操作.文件读写(write.read.readlines.readline).文件的

  • 一篇文章带你顺利通过Python OpenCV入门阶段

    目录 1. OpenCV 初识与安装 2. OpenCV 模块简介 3. OpenCV 图像读取,显示,保存 4. 摄像头和视频读取,保存 5. OpenCV 常用数据结构和颜色空间 6. OpenCV 常用绘图函数 7. OpenCV 界面事件操作之鼠标与滑动条 8. 图像像素.通道分离与合并 9. 图像逻辑运算 10. 图像 ROI 与 mask 掩膜 11. 图像几何变换 12. 图像滤波 13. 图像固定阈值与自适应阈值 14. 图像膨胀腐蚀 15. 边缘检测 16. 霍夫变换 17.

  • python OpenCV学习笔记

    图像翻转 使用Python的一个包,imutils.使用下面的指令可以安装. pip install imutils imutils包的Github地址:https://github.com/jrosebr1/imutils CSDN镜像:https://codechina.csdn.net/mirrors/jrosebr1/imutils 可以在上面这个地址里面学习更多的使用方式. import cv2 import imutils ''' imutils.rotate 第一个参数是翻转的图像

  • 深入了解Python Opencv数据增强

    目录 1.按比例放大和缩小 2.平移图像 3.旋转图像 4.镜像变换 5.添加椒盐噪声 6.添加高斯噪声 7.模糊化 8.重新组合颜色通道 实例 总结 常见的数据增强操作有:按比例放大或缩小图片.旋转.平移.水平翻转.改变图像通道等. 1.按比例放大和缩小 ​ 扩展缩放只是改变图像的尺寸大小.OpenCV 提供的函数 cv2.resize()可以实现这个功能.图像的尺寸可以自己手动设置,也可以指定缩放因子.可以选择使用不同的插值方法.在缩放时我们推荐使用 cv2.INTER_AREA,在扩展时我

随机推荐