C#使用EmguCV播放视频

目录

一、前言

1、简介 

2、测试工程代码下载链接

3、EmguCV 库文件下载链接

二、工程环境配置

1、EmguCV控件添加引用

(1)窗口控件添加

 (2)相关Dll文件添加添加引用

(3)工程运行基础文件夹添加

 (4)调试运行

2、界面设计

(1)整体布局

 (2)设置Image相关属性

 3、添加相应控件事件程序

(1)全局变量

(2)打开影片

(3)播放和暂停


一、前言

1、简介 

 EmguCV是C#版本的OpenCV,EmguCV播放视频主要是将视频解析成一帧帧图像画面。每秒钟显示相对应的帧数画面,即可达到视频播放的效果。本质上是很短的时间显示足够多的图像,因此播放过程中没有影片声音。使用该方式播放视频的优势是可以对视频进行精确播放控制

 播放控制效果

2、测试工程代码下载链接

https://download.csdn.net/download/panjinliang066333/88167836

3、EmguCV 库文件下载链接

https://download.csdn.net/download/panjinliang066333/85711171

二、工程环境配置

1、EmguCV控件添加引用

创建C# Winform工程

(1)窗口控件添加

工具箱中添加EmguCV选项卡,向EmguCV中添加EmguCV.UI控件

 向窗口中添加EmguCV->ImageBox控件,控件背景颜色设置为黑色

 (2)相关Dll文件添加添加引用

(3)工程运行基础文件夹添加

将库文件中的X86文件夹复制到程序工程的Debug或者Release文件夹下。不管是X86系统还是X64系统,都要复制该X86文件夹。

 (4)调试运行

F5或者启动运行,无错误。

2、界面设计

(1)整体布局

 (2)设置Image相关属性

①设置ImageBox控件Enable为False,否则程序运行起来鼠标在控件上滚动会会对图像进行缩放

 ②设置ImageBox控件SizeMode为Zoom,即根据控件大小调整显示的图像对应的尺寸大小

 3、添加相应控件事件程序

(1)全局变量

        private MmTimer userTimer = new MmTimer();  //精确定时器Capture cap;int fps;                    //影片帧率int numFrames;              //影片总帧数int videoWidth;             //影片宽度int videoHeight;            //影片高度int currentFrame = 0;       //当前帧double setFrame = 0;        //定位到的帧bool isStart = false;       //是否播放

(2)打开影片

        private void btnOpenFile_Click(object sender, EventArgs e){try{//打开视频OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter = "MP4文件|*.mp4|AVI文件|*.avi|RMVB文件|*.rmvb|WMV文件|*.wmv|MKV文件|*.mkv|所有文件|*.*";if (openFileDialog.ShowDialog() == DialogResult.OK){txtFileName.Text = openFileDialog.SafeFileName;////Application.Idle += Application_Idle;         //事件方式cap = new Capture(openFileDialog.FileName);     //读入视频//fps = (int)cap.GetCaptureProperty(CapProp.Fps);                     //获取视频帧率txtFps.Text = fps.ToString();numFrames = (int)cap.GetCaptureProperty(CapProp.FrameCount);        //获取视频总帧数txtFrameNums.Text = numFrames.ToString();videoWidth = (int)cap.GetCaptureProperty(CapProp.FrameWidth);       //获取视频宽度txtWidth.Text = videoWidth.ToString();videoHeight = (int)cap.GetCaptureProperty(CapProp.FrameHeight);     //获取视频高度txtHeight.Text = videoHeight.ToString();}}catch{MessageBox.Show("操作异常", "提示!!!");}}

(3)播放和暂停

        private void btnPlay_Click(object sender, EventArgs e){if (txtFileName.Text == ""){MessageBox.Show("请先打开视频");return;}if (btnPlay.Text == "播放"){isStart = true;btnPlay.Text = "暂停";//cap.SetCaptureProperty(CapProp.PosFrames, currentFrame);txtCurrentFrame.Text = currentFrame.ToString();   //当前播放的帧数Mat a = cap.QuerySmallFrame();imageBox1.Image = a;GC.Collect();PlayTimeSet();}else if (btnPlay.Text == "暂停"){isStart = false;btnPlay.Text = "播放";userTimer.Stop();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/23574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CVS,SVN,Git,Mercurial 代码管理工具

现代软件开发过程中要实现高效的团队协作,需要使用代码分支管理工具实现代码的共享、追溯、回滚及维护等功能。目前流行的代码管理工具,包括 CVS,SVN,Git,Mercurial 等 CVS 和 SVN 是集中管理,Git 具有非常…

【开发问题】flink的sql任务,用命令行执行

flink-sql 命令行flink-sql的客户端sql文件地址sql的内容 命令行 /mnt/flink/flink-1.17.1/bin/sql-client.sh embedded -f /mnt/flink/flink-1.17.1/examples/sql/oracle2Oracle flink-sql的客户端 /mnt/flink/flink-1.17.1/bin/sql-client.shsql文件地址 /mnt/flink/flink-1…

解决github打不开的方法

解决github打不开的方法 本文参考文章:解决可ping通但无法访问github网站的问题 一、确定域名github.com的ip地址 进入网址 IP/服务器github.com的信息 - 站长工具 (chinaz.com),查看 ip 地址。 20.205.243.166 github.com二、确定域名github.global.…

spring boot java使用XEasyPdf生成pdf文档

java使用XEasyPdf生成pdf文档 spring boot java使用XEasyPdf生成pdf文档第一步导入maven坐标,pom.xml全部贴上第二步编写代码代码实战&#xff1a; spring boot java使用XEasyPdf生成pdf文档 第一步导入maven坐标,pom.xml全部贴上 <?xml version"1.0" encoding…

使用ubuntu-base制作根文件系统

1&#xff1a;ubuntu官网下载最小根文件系统&#xff1a; 放置到电脑的ubuntu中&#xff0c; Mkdir Ubuntu_rootfs Cd Ubuntu_rootfs Sudo tar –zxvf Ubuntu-bash-xxxxxx.tar.gz 2&#xff1a;电脑的ubuntu安装qemu搭建arm模拟系统 将/usr/bin/qemu-arm-static/(64位拷贝…

Milvus Cloud凭借AI原生,可视化优势荣登全球向量数据库性能排行榜VectorDBBench.com 榜首

在当今的大数据时代,随着人工智能技术的快速发展,向量数据库作为处理大规模数据的关键工具,其性能和效率越来越受到关注。最近,全球向量数据库性能排行榜 VectorDBBench.com 公布了一份最新的评估报告,引人瞩目的是,成立不到一年的新兴公司 Milvus Cloud 凭借其 AI 原生和…

LNMP及论坛搭建

安装 Nginx 服务 systemctl stop firewalld systemctl disable firewalld setenforce 0 1.安装依赖包 #nginx的配置及运行需要pcre、zlib等软件包的支持&#xff0c;因此需要安装这些软件的开发包&#xff0c;以便提供相应的库和头文件。 yum -y install pcre-devel zlib-devel…

抖音seo源码开发源代码搭建分享

抖音SEO源码开发涉及到以下几个方面&#xff1a; 前端开发&#xff1a;包括抖音SEO页面的设计与布局&#xff0c;以及需要使用到的前端技术&#xff0c;如HTML、CSS、JavaScript等。 后端开发&#xff1a;包括抖音SEO页面的数据获取和处理&#xff0c;以及需要使用到的后端技术…

JavaScript数据结构与算法——栈

文章目录 一、初始栈结构1.1 特性1.2 注意事项 二、栈结构的封装2.1 封装简单栈结构2.2 利用栈将十进制转二进制 一、初始栈结构 1.1 特性 类似于汉诺塔&#xff0c;后进先出&#xff0c;每次只能操作栈顶的元素。关键词&#xff1a;压栈、退栈 简单示意图&#xff1a; 1.…

python-面向对象.多态

多态 多态 什么是多态&#xff1a; 定义时的类型和运行时的类型不一样&#xff0c;也就是定义时并不确定要调用的是 哪个方法&#xff0c; 只有运行的时候才能确定调用的是哪个 多态特性 多态性是指在不考虑实例类型的情况下使用实例&#xff0c; 多态性分为静态多态性和动态…

LLM - LLama 模型读取报错 TypeError: not a string

一.引言 读取 LLama2 模型时报错 TypeError: not a string 看异常栈是 AutoTokenizer.from_pretrained 时候的异常。 二.问题解决 出现类似加载模型异常的问题&#xff0c;大致分两类&#xff1a; ◆ 模型地址异常 脚本里传的 pretrained_model Path 有问题&#xff0c;加 …

react经验5:访问子组件内容

应用场景 父级需要调用子组件的某函数 实现步骤 案例&#xff1a;创建自定义按钮 button.tsx import { Ref, forwardRef, useImperativeHandle,ReactNode} from "react" declare type ButtonProps {/**按钮文字 */children?: ReactNode,onClick?: () > voi…

Eureka 学习笔记5:InstanceRegistry

版本 awsVersion ‘1.11.277’ LeaseManager 接口管理实例的租约信息&#xff0c;提供以下功能&#xff1a; 注册实例取消注册实例实例续约剔除过期实例 public interface LeaseManager<T> {/** 注册实例并续约*/void register(T r, int leaseDuration, boolean isRep…

socket server服务器开发常见的并发模型

两种高效的事件处理模式 服务器程序通常需要处理三类事件&#xff1a;I/O 事件、信号及定时事件。有两种高效的事件处理模式&#xff1a;Reactor和 Proactor&#xff0c;同步 I/O 模型通常用于实现Reactor 模式&#xff0c;异步 I/O 模型通常用于实现 Proactor 模式。 无论是 …

【ASP.NET MVC】生成页面(6)

本应该继续数据库访问的问题进行探讨&#xff0c;前文确实比较LOW。但本人认为&#xff1a;初学者需要解决的是快速了解知识路线的问题&#xff0c;所谓“生存问题”&#xff0c;所以&#xff0c;干脆把流程先走完。 一、页面生成 下面这张图在前面已经介绍过&#xff1a; 前…

.Net6 Web Core API --- Autofac -- AOP

目录 一、AOP 封装 二、类拦截 案例 三、接口拦截器 案例 AOP拦截器 可开启 类拦截器 和 接口拦截器 类拦截器 --- 只有方法标注 virtual 标识才会启动 接口拦截器 --- 所有实现接口的方法都会启动 一、AOP 封装 // 在 Program.cs 配置 builder.AddAOPExt();//自定义 A…

探索PostgreSQL的新功能:最新版本更新解析

PostgreSQL作为一种强大而开源的关系型数据库管理系统&#xff0c;不断在不断进化和改进。每一次的版本更新都带来了更多功能和改进&#xff0c;让用户在处理大规模数据和复杂查询时体验更好的性能和功能。在本文中&#xff0c;我们将深入探索PostgreSQL的最新版本更新&#xf…

ARM裸机-14(S5PV210的时钟系统)

1、时钟系统 1.1、什么是时钟 时钟是同步工作系统的同步节拍 1.2、SoC为什么需要时钟 Soc内部有很多器件&#xff0c;例如CPU、串口、DRAM控制制器、GPIO等内部外设&#xff0c;这些东西要彼此协同工作&#xff0c;需要一个同步的时钟系统来指挥。这个就是我们SoC的时钟系统。…

面向城乡公交的嵌入式系统远程升级设计方案

针对城乡公交站牌显示终端现场升级与维护困难的问题&#xff0c;提出了一种基于应用程序&#xff08;IAP&#xff09;技术的嵌入式系统远程升级设计方案。 通过IAP技术配合改良过的远程升级程序代替传统的现场烧写调试&#xff0c;节约了奔赴现场调试的时间和成本。 针对远程…

Gradle-02:问题Plugin with id ‘maven‘ not found

1. 背景 在一次使用 Gradle 构建自己项目&#xff0c;完事&#xff0c;需要上传到本地 Maven 仓库&#xff0c;因为事先并不清楚 apply plugin: maven 插件已经被 Gradle 移除&#xff0c;找了一圈&#xff0c;才找到解决方案。 2. 原因 apply plugin: maven def localRepo f…