c# 远程监控(2) 摄像头调研及模拟
经过N多调研,最终选择了OpenCV(Emgu CV)
** 至于DirectShow, OpenCV等等其他大家可以百度,在这里我就不再赘述
环境:vs2010 vs2012 vs2013均可
OpenCV官方网站为:Emgu CV
也可以去我的百度网盘下载安装包:libemgucv-windows-universal-cuda-2.4.10.1940
然后就可以自己想怎么玩,怎么玩了。
安装好后:

我的一个Demo,用来打开摄像头:
下载地址:c#调用摄像头
代码结构:

运行效果:

核心代码解释:
namespace CameraCapture
{
public partial class CameraCapture : Form
{
private readonly Capture _capture;
private bool _captureInProgress; public CameraCapture()//构造函数
{
InitializeComponent();
try
{
_capture = new Capture();//构造一个摄像头实例
_capture.ImageGrabbed += ProcessFrame;//图像捕捉事件
}
catch (NullReferenceException excpt)
{
MessageBox.Show(excpt.Message);
}
} private void ProcessFrame(object sender, EventArgs arg)
{
Image<Bgr, Byte> frame = _capture.RetrieveBgrFrame();//获取视频帧 Image<Gray, Byte> grayFrame = frame.Convert<Gray, Byte>();
Image<Gray, Byte> smallGrayFrame = grayFrame.PyrDown();
Image<Gray, Byte> smoothedGrayFrame = smallGrayFrame.PyrUp();
Image<Gray, Byte> cannyFrame = smoothedGrayFrame.Canny(, ); captureImageBox.Image = frame;
grayscaleImageBox.Image = grayFrame;
smoothedGrayscaleImageBox.Image = smoothedGrayFrame;
cannyImageBox.Image = cannyFrame; //转成图片并显示在主界面上
} private void CaptureButtonClick(object sender, EventArgs e)
{
if (_capture != null)
{
if (_captureInProgress)
{
//stop the capture
captureButton.Text = "Start Capture";
_capture.Pause();
}
else
{
//start the capture
captureButton.Text = "Stop";
_capture.Start();
} _captureInProgress = !_captureInProgress;
}
} private void ReleaseData()//释放资源
{
if (_capture != null)
_capture.Dispose();
} private void FlipHorizontalButtonClick(object sender, EventArgs e)
{
if (_capture != null) _capture.FlipHorizontal = !_capture.FlipHorizontal;
} private void FlipVerticalButtonClick(object sender, EventArgs e)
{
if (_capture != null) _capture.FlipVertical = !_capture.FlipVertical;
}
}
}
扩展
emgucv不仅可以控制摄像头,而且可以直接播放本地视频,但是需要一些配置
public CameraCapture()
{
InitializeComponent();
try
{
//_capture = new Capture();
var fileName = "文件地址";
_capture = new Capture(fileName);
_capture.ImageGrabbed += ProcessFrame;
}
catch (NullReferenceException excpt)
{
MessageBox.Show(excpt.Message);
}
}
需要下载两个第三方文件:
opencv_ffmpeg.dll
opencv_ffmpeg_64.dll
三方插件可以去 github opencv 下载 三方控件,我的百度网盘:opencv_ffmpeg
这两个文件需要再重新改下名字(因为加进去报错,始终用不起,谷歌了好半天):
opencv_ffmpeg.dll opencv_ffmpegVersion.dll -> opencv_ffmpeg_64.dll
opencv_ffmpeg_64.dll opencv_ffmpegVersion_64.dll -> opencv_ffmpeg_64.dll
最后复制加到bin目录下的 x86,x64 下就可以播放本地视频了
效果如下:

有问题可以站内信
c# 远程监控(2) 摄像头调研及模拟的更多相关文章
- [转]GStreamer资料(摄像头采集,视频保存,远程监控)DVR
		
http://blog.csdn.net/wzwxiaozheng/archive/2010/12/26/6099397.aspx GStreamer资料整理(包括摄像头采集,视频保存,远程监控,流媒 ...
 - c# 远程监控(1) 大纲
		
此篇文章主要讲了如何使用C# Winform程序模拟一个远程监控系统,并使用RTP实时传输协议传输数据. 应用场景:远程监控.局域网视频会议.客户端流式缓冲播放 这方面的资料还是有一些,但是都需要整合 ...
 - c# 远程监控(4) 接收端 RTP包重组 分屏显示
		
我们在上一期使用RTP协议,并进行了配置,打包了视频数据,这一期我们就对发送的数据进行重组,并显示在接受端上.最后对其进行扩展,支持多客户端视频发送,并在接收端分屏显示.完成远程监控的模拟. 先来个效 ...
 - DIY远程监控室内温度设备(tiny6410+ds18b20+yeelink+curl)
		
春节了,趁着假期的空闲时间,抽空捣鼓了下tiny6410开发板,发现这个东东尘封许久,很长时间没用过了.貌似最近物联网大热,谷歌收购Nest,其设计的恒温器能够智能调节和远程控制房间的温度,UI和设计 ...
 - 基于v4l2 ffmpeg x264的视频远程监控(附上编译好的库文件)
		
说明:主要是基于ghostyu网友整理的< arm mini2440 基于v4l2 ffmpeg x264的视频远程监控>.自己做了一遍,遇到不少问题,就整理记录下来. 1.平台 硬件:a ...
 - 转载:JProfiler远程监控LINUX上的Tomcat过程细讲
		
来源于xuwanbest的博客 所谓"工欲善其事,必先利其器",好的工具确能起到事半工倍的作用.我用到的最多的就两个JConsole 和JProfiler .JConsole监 ...
 - SNMP远程监控进程信息的OID
		
最近有个项目需要用snmp远程监控进程信息.于是我查了一下资料. 一.资料 .1.3.6.1.2.1.25.4.2.1.1.iso.org.dod.internet.mgmt.mib-2.host.h ...
 - 远程监控 – 应用程序运行状况测量 CSF 博客
		
在远程监控基础知识和故障排除中,我们探讨了 Windows Azure 平台提供的基础指标.信息源.工具和脚本,介绍了有关监控和应用程序运行状况的基本原则.我们演示了如何利用这些基本原则对在 Wind ...
 - jvisualvm远程监控Tomcat
		
网上已经有很多这方面的资料,但有些很杂乱,这里做了整理总结. 一.Java VisualVM 概述 对于使用命令行远程监控jvm 太麻烦 . 在jdk1.6 中 Oracle 提供了一个新的可视化的. ...
 
随机推荐
- “Clean Code” 读书笔记序
			
最近开始研读 Robert C.Martin 的 “Clean Code”,为了巩固学习,会把每一章的笔记整理到博客中.而这篇博文作为一个索引和总结,会陆续加入各章的笔记链接,以及全部读完后的心得体会 ...
 - 分享两个模拟get和post方法的工具类,让应用能够与服务器进行数据交互
			
很久没有码字了,今天跟大家分享一个模拟get和post方法的工具类,在安卓应用中很多都需要跟服务器进行数据交互,这需要两方面的配合,首先服务器端会给应用提供一些数据交互的接口,可是怎样在应用中去调用呢 ...
 - 50道经典的JAVA编程题 (11-15)
			
50道经典的JAVA编程题 (11-15),新年的第一天,继续啦...\(^o^)/~,这50道题都跨年了啊...哈哈 [程序11] TestTN.java 题目:有1.2.3.4个数字,能组成多少个 ...
 - tRNAscan-SE
			
tRNAscan-SE是一款可以在基因组上扫描tRNA的序列,也就是说你给定一组基因序列(fasta数据格式),可以用这个软件去预测这个序列是不是tRNA.具体的实现原理,我不搞生物,所以也就不太明白 ...
 - 云计算分布式大数据Hadoop实战高手之路第八讲Hadoop图文训练课程:Hadoop文件系统的操作实战
			
本讲通过实验的方式讲解Hadoop文件系统的操作. “云计算分布式大数据Hadoop实战高手之路”之完整发布目录 云计算分布式大数据实战技术Hadoop交流群:312494188,每天都会在群中发布云 ...
 - 从assemblyer Instructure deepth understander C principle
			
要彻底搞清楚C语言的原理,就必须深入到指令一层去理解.你写一行C代码,编译器会生成什么样的指令,要做到心中有数;
 - Java 远程通讯技术及原理分析
			
在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI.MINA.ESB.Burlap.Hessian.SOAP.EJB和JMS等,这些 ...
 - phonegap Overview
			
PhoneGap 和 Cordova的关系阐述 是PhoneGap贡献给Apache后的开源项目,是从PhoneGap中抽出的核心代码,是驱动PhoneGap的核心引擎.你可以把他想象成类似于Webk ...
 - Android 查看内存
			
文章参照自:http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-a ...
 - js主要知识轮廓笔记
			
一.js中的基础类型和引用类型: 基础类型:1.Number2.String3.Boolean4.Undefined5.Null 引用类型(内置对象):1.Object类型2.Array类型3.Dat ...