首页 > 编程语言 >使用OpenCV进行视频边缘检测:案例Python版江南style

使用OpenCV进行视频边缘检测:案例Python版江南style

时间:2024-10-22 23:46:04浏览次数:7  
标签:视频 江南style 边缘 Python 检测 frame cv2 OpenCV 视频文件

1. 引言

本文将演示如何使用OpenCV库对视频中的每一帧进行边缘检测,并将结果保存为新的视频文件。边缘检测是一种图像处理技术,它可以帮助我们识别出图像中不同区域之间的边界。在计算机视觉领域,这项技术有着广泛的应用,比如物体识别、运动分析等。

2. 环境准备

为了运行本示例,您需要安装Python以及OpenCV库。可以通过pip来安装OpenCV:

pip install opencv-python

确保您的系统上已经有一个可用的视频文件,该文件将作为输入提供给程序。

3. 代码详解

接下来,我们将逐步解析用于实现视频边缘检测的Python代码。

3.1 导入库与变量定义

首先导入必要的库并设置输入输出视频路径。

import cv2  # 导入OpenCV库

video_path = r"C:\Users\20220\Desktop\275954384_nb2-1-16.mp4"  # 输入视频文件路径
output_path = r"C:\Users\20220\Desktop\edge_detected_video.avi"  # 输出视频文件路径

这里r前缀表示原始字符串,避免转义字符问题。

3.2 视频文件的读取

接下来,我们使用cv2.VideoCapture函数来打开指定路径下的视频文件。

# 打开指定路径下的视频文件
cap = cv2.VideoCapture(video_path)

# 检查是否成功打开视频文件
if not cap.isOpened():
    print("无法打开视频文件")
    exit()

这里我们还检查了视频文件是否成功被打开。如果未能打开(例如文件路径错误或格式不支持),程序将打印错误信息并退出。

3.3 获取视频属性

为了正确配置输出视频,我们需要获取输入视频的一些关键属性,比如帧率、宽度和高度。

# 获取视频帧率
fps = cap.get(cv2.CAP_PROP_FPS)
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

这些参数对于保持输出视频与原始视频的一致性非常重要。

3.4 创建输出视频对象

基于之前获取的信息,我们可以创建一个VideoWriter对象,用来保存处理后的视频帧。

# 创建VideoWriter对象用于保存处理后的视频
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(output_path, fourcc, fps, (frame_width, frame_height), isColor=False)

这里选择了XVID编码器,并且设置为灰度模式(因为边缘检测的结果是黑白图像)。

3.5 设置Canny边缘检测参数

定义用于Canny边缘检测算法的两个阈值。

# Canny边缘检测的阈值
canny_threshold1 = 100
canny_threshold2 = 200

这两个阈值决定了边缘强度的最小值和最大值。通过调整它们,可以控制边缘检测的效果。

3.6 处理视频帧

现在进入循环中逐帧读取视频,并对每一帧进行处理。

while True:
    # 从视频流中读取下一帧
    ret, frame = cap.read()

    # 如果没有更多帧可以读取,跳出循环
    if not ret:
        break

    # 对当前帧进行高斯模糊以减少噪声
    blurred_frame = cv2.GaussianBlur(frame, (5, 5), 0)

    # 将当前帧转换成灰度图像
    gray_frame = cv2.cvtColor(blurred_frame, cv2.COLOR_BGR2GRAY)

    # 对灰度图像进行Canny边缘检测
    edges = cv2.Canny(gray_frame, canny_threshold1, canny_threshold2)

此段代码首先读取一帧,然后对其进行预处理(包括去噪和转灰度),最后应用Canny算法来进行边缘检测。

3.7 显示和保存处理后的帧

在完成边缘检测后,我们希望能够在屏幕上显示结果,并将这些处理过的帧写入到输出视频文件中。

    # 显示含有边缘的图像
    cv2.imshow('Edge Detected Video', edges)

    # 写入处理后的帧到输出视频
    out.write(edges)

使用cv2.imshow函数可以实时查看每一帧经过边缘检测后的效果。同时,通过out.write(edges)方法,我们将每帧的结果保存至之前创建的VideoWriter对象中。

此外,在循环内还添加了按键监听逻辑,以便用户可以通过按“q”键来手动终止程序执行:

    # 检测是否有按键事件,如果是'q'键则中断循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
3.8 资源释放

当所有帧都已经被处理或用户主动中断时,我们需要正确地关闭所有打开的资源,以避免内存泄漏或其他潜在问题。

# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()

这里调用了release()方法来关闭视频捕获器和写入器,以及cv2.destroyAllWindows()来销毁所有由OpenCV创建的窗口。
###运行结果
在这里插入图片描述

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="7IpaEmQa-1729495300726" src="https://player.bilibili.com/player.html?aid=113344153391293"></iframe>

Python版江南style

4. 结论

本文展示了如何利用Python与OpenCV实现视频中的边缘检测功能。通过这个例子,您不仅学会了如何读取、处理并保存视频数据,同时也掌握了基本的图像处理技术之一——Canny边缘检测。这种能力对于从事计算机视觉相关工作的开发者来说是非常有用的。

标签:视频,江南style,边缘,Python,检测,frame,cv2,OpenCV,视频文件
From: https://blog.csdn.net/2301_78198846/article/details/143113231

相关文章

  • Gradio(二):利用纯python代码创建Web应用最简单的包
    接上文“Gradio:利用纯python代码创建Web应用最简单的包”本文进一步介绍Gradio包的使用。1、多个输入与多个输出当需要多个输入和多个输出时importgradioasgrdefgreet(name,is_morning,temperature):salutation="Goodmorning"ifis_morningelse"Goodeve......
  • 基于大数据 Python+Vue 电影票房爬取可视化系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:jf1d!!!!!!!!!项目介绍在快速发展的社会中,娱乐领域也在不断进步。为了提高数据分析的效率和观众的观影体验,越来越多的影视公司和电影院选择利用互联网......
  • 100+SCI科研绘图系列教程(R和python)
    科研绘图系列:箱线图加百分比点图展示组间差异-CSDN博客科研绘图系列:箱线图加蜜蜂图展示组间数据分布-CSDN博客科研绘图系列:小提琴图和双侧小提琴图展示组间差异-CSDN博客科研绘图系列:组间差异的STAMP图的ggplot2实现-CSDN博客科研绘图系列:组间差异误差棒展示-CSDN博客科研绘......
  • 基于PyQt Python的深度学习图像处理界面开发(二)
         Python标准库更多的适合处理后台任务,唯一的图形库tkinter使用起来很不方便,所以后来出现了针对Python图形界面开发的扩展库,例如PyQt。    在介绍PyQt之前,必须先简单介绍一下Qt。Qt是一个C++可视化开发平台,是一个跨平台的C++图形用户界面应用程序框架(C++......
  • python捕获鼠标键盘
    https://item.taobao.com/item.htm?from=cart&id=771194972569&pisk=f8nsFbjz51fs1GLwPtpUPW36bmrjcjtyctwxExINHlETGoMjerI2SlzbcXFEb5kaXSZjhYUxgSkNI2creGowSoSbjoqvaQ-y4ODgmoFaQ0_Nske7enSAX-KXde_DaQ-ycFBLcCOr_GiSnMe7eoeTk5Cpd-yVDshADkpQH-5OkGhvdvF3h1QAXrI......
  • 【Python-AI篇】数据结构和算法
    1.算法概念1.1什么是数据结构存储,组织数据的方式1.2什么是算法实现业务目的的各种方法和思路算法是独立的存在,只是思想,不依附于代码和程序,可以使用不同语言实现(java,python,c)1.2.1算法的五大特性输入:算法具有0个或多个输入输出:算法至少有1个或多个输出有穷性:算法......
  • Python——脚本实现datax全量同步mysql到hive
    文章目录前言一、展示脚本二、使用准备1、安装python环境2、安装EPEL3、安装脚本执行需要的第三方模块三、脚本使用方法1、配置脚本2、创建.py文件3、执行脚本4、测试生成json文件是否可用前言在我们构建离线数仓时或者迁移数据时,通常选用sqoop和datax等工具进行......
  • Python停车场车位识别
    程序示例精选Python停车场车位识别如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!前言这篇博客针对《Python停车场车位识别》编写代码,代码整洁,规则,易读。学习与应用推荐首选。文章目录一、所需工具软件二、使用步骤       1.......
  • python 轻松实现公司内部音视频会议
     一些公司内部会议系统价格比较昂贵,而且经常出现问题,为了保证公司内部数据泄密问题,可以自己开发一个内部视频会议软件。会议窗口如下开发语言        python3.9功能描述:        python实现公司内部音视频会议、收发文件实现代码(简易版)     ......
  • Python学习的自我理解和想法(19)
    #1024程序员节|征文#学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码!今天是学Python的第19天,学的内容是面向对象。开学了,时间不多,写得不多,见谅。目录1.面向对象的三大特性(1).封装(2).继承(3).多态2.继承(1).简单使用(2).有构造函数的继承1.继承父类的构造方法......