directshow哲学原理、 Emgucv入门

by admin on 2018年12月18日

本示例重要测试了directshow、Emgucv的录像流采集功用,其中Emgucv还实现了脸面的识别。演示源码下载

哲学原理 1

一、directshow的介绍

落实原理:directshow可以拿视频头的多寡流以事件之计实时传送让程序,程序在这事件受到得到流后好保留也图(流得透过多独filterGraph2对象)。directshow提供用数据绑定到picturebox控件上。以下为开辟一个视频头的步调:

余忆童稚时,在直里之报童文艺表演中,演出出色绝伦让自家永生难忘。

1. 引入directshow.net控件

这控件可以以网上寻找,即好下载,名称也DirectShowLib-2005,它是directshow的.net版本的封装.

那时我大体5年,上正在幼儿园,经过姑奶奶的推荐,阿娜先生让自家任这会舞台剧的男主角。依据同等总统DVD中之动作剧情,老师教什么动作大家学什么动作。给自家记忆太特此外凡每一趟排练我之男主角与本身之阴主角搭档会给教授化妆画很老,长日子之打扮对于才5寒暑之儿女来说是如此遥远,坐于小板凳上之我心已飘至太空云外。

2. 先导化directshow相关的接口

代码如下:

int hr = 0;
this.filterGraph2 = (IFilterGraph2)new FilterGraph();
this.captureGraphBuilder2 = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
this.mediaControl = (IMediaControl)this.filterGraph2;
this.videoWindow = (IVideoWindow)this.filterGraph2;
DsError.ThrowExceptionForHR(hr);

说明:

  1. filterGraph2:流过滤器
  2. captureGraphBuilder2:视频设备处理
  3. mediaControl:视频控制,如:开启或关闭等
  4. videoWidow:视频突显在窗体上的有些信设置类
  5. filterGraph2会被增大到captureGraphBuilder2对象.

部舞台剧讲述的凡产田务农的伯父伯捕到平等修大鱼,带回家与内在鱼儿的做法及闹了分歧,分歧争来变大,他们之均等深过多孩子下调节纠纷后同好。舞台剧结尾处印度影视般全部演员于舞台上共舞蹈颇为喜庆热闹。

3. 找到视频头设备

int hr = 0;
IEnumMoniker classEnum = null;
IMoniker[] moniker = new IMoniker[1];
object source = null;

ICreateDevEnum devEnum = (ICreateDevEnum)new CreateDevEnum();
hr = devEnum.CreateClassEnumerator(FilterCategory.VideoInputDevice, out classEnum, 0);
DsError.ThrowExceptionForHR(hr);

Marshal.ReleaseComObject(devEnum);

if (classEnum == null)
    throw new Exception("classEnum is null");

if (classEnum.Next(moniker.Length, moniker, IntPtr.Zero) == 0)
{
    Guid iid = typeof(IBaseFilter).GUID;
    moniker[0].BindToObject(null, null, ref iid, out source); //moniker绑定以 ibasefilter和object上
}

Marshal.ReleaseComObject(moniker[0]);
Marshal.ReleaseComObject(classEnum);

return (IBaseFilter)source;

找到录像视频头,将变为一个IBaseFilter对象。

吓了,我而提这次上演的要命关键且可以之失误了。这天演出和通常排练差不多的状态,只可是现场的观众实际是大半,黑压压一切片人头窜动,以至于年幼的自打心底发生那么等同丝惊叹,哪来那么坏一森人数,挤在台下要干什么?

4. 多视频头、录像拍卖过滤器

将IBaseFilter对象插足到filterGraph2对象上,作为第一叠录像的过滤,前面会安放picturebox控件上。然后再到场山姆pleGrabber对象,用于捕获每一样帧的录像数据。

至了开班大家的上演,DVD中一样名誉雷响,我带来在田里刚抓的鱼往家里赶,在家中老小及本人于就条鱼的烧法上生了口角,多少人口以铁锅前尽快在鱼儿,也许缘对新舞台之非熟知或心事重重,她一个推搡我一个百般动作,手肘遭遇了铁锅,铁锅哗啦一下从舞台上滚落到台下(没妨害及人),有那么零点零几秒的发气氛难堪,但自我立就大意掉这人铁锅继续淡定的朝向生上演着。

5. 装视频头呈现参数、预览参数、 设置保存之尺码音讯

此步代码较多,就不在粘贴代码,前边给出源码下载地址.

这就是说一刻凡是什么感觉,通常彩排大家动作没这高大的,这天居然一个非凡推搡碰翻了铁锅,触遭遇的那一刻心地隐隐有种植而起大事之感觉到。不是自吹,假设我们不是演出的那么投入的话,我怀恋是匪汇合促进那么由此力遇到铁锅的。

6. 绑定以pictruebox控件上,以及运行

int hr = 0;
hr = this.videoWindow.put_Owner(this.pictureBox.Handle);
DsError.ThrowExceptionForHR(hr);

hr = this.videoWindow.put_WindowStyle(WindowStyle.Child);
DsError.ThrowExceptionForHR(hr);

hr = this.videoWindow.put_Visible(OABool.True);
DsError.ThrowExceptionForHR(hr);

System.Drawing.Rectangle rc = this.pictureBox.ClientRectangle;
hr = this.videoWindow.SetWindowPosition(0, 0, 640, 480);
DsError.ThrowExceptionForHR(hr);

哲学原理 2

 

量这时候阿娜先生傻眼了,动作那么深如故将铁锅甩下大了,彩排时一直没有发了那状态,更想不至之是因这口自由不羁的铁锅,台下的观众沸腾了,笑声欢呼声一切片嘈杂,前排的几单小姑竖起大拇指惊呼称赞我表演得美好表演的好。

二、emgucv的介绍

emgucv是opencv的.net版本封装,并且opencv获取视频流的法子呢是使的directshow。由于开展了包,打开和认识别人像就颇为简约了。

这就是说场合这感觉这体验自己下辈子也未会合忘记,就是深感自己通晓没召开对相同宗事,不过现实所反映给自身之是全相反的信息,一张张愉悦的笑脸,一阵又一阵之呼叫,长及数秒的可以掌声,那一刻工夫已了貌似可以得而自身沉醉。哇哦,我是拂锅小超人耶~ 
      (ง ˙o˙)ว

1. 下载emgucv并安装,然后以网环境变量中补充加其安装路径.

哲学原理 3
由来,还亟需复制相关的dll到支付项目受到:
哲学原理 4

奇怪在预期之外的失误还是可以带动这么大个惊喜。老师等还闹姑奶奶这段日子都充足快意,遭逢熟人会称这表演夸得共不守嘴。

2. 开辟视频头

private VideoCapture capture;
private Mat mat;
private Common.DetectFace detectFace;
public Form1()
{
    InitializeComponent();
    CvInvoke.UseOpenCL = false;
    detectFace = new Common.DetectFace();
}

private void Form1_Load(object sender, EventArgs e)
{
    capture = new Emgu.CV.VideoCapture();
    capture.ImageGrabbed += Capture_ImageGrabbed;
    capture.Start();
}

private void Capture_ImageGrabbed(object sender, EventArgs e)
{
    if (capture != null && capture.Ptr != IntPtr.Zero)
    {
        mat = new Mat();
        capture.Retrieve(mat, 0);

        var ls = detectFace.Detect(mat);
        foreach(var face in ls)
        {
            CvInvoke.Rectangle(mat, face, new Bgr(Color.Red).MCvScalar, 2);
        }

        imageBox1.Image = mat;
    }
}

说明:

  1. Capture_ImageGrabbed捕获到之尽管是实时的视频流,在这里即得举办连锁的处理。
  2. 此地插手了针对颜的辨认,并由此红框表示出。

回忆老姐常说自4东于老街上那么其他一个幼儿园的时侯,通常呆呆的愿意着天,可能自己当思考人生军事学问题吧。

跳出那段回忆回到现在,个人觉得自己是起或向大多面方面发展之,像金凯瑞同化一个演员,编剧,制作人,戏剧家等等,在自己之内心深处,藏着平等光百更换死。我还有好多怪之记忆,少见的感受,未来会当此处为而讲述(‘=

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图