伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 教育考试 » 文章详细 订阅RssFeed

Emgucv视频处理--进阶篇

来源:本站原创 浏览:98次 时间:2022-12-10


链接:https://zhidao.baidu.com/question/559571801.html

C#中的IntPtr类型称为“平台特定的整数类型”,它们用于本机资源,如窗口句柄。资源的大小取决于使用的硬件和操作系统,但其大小总是足以包含系统的指针(因此也可以包含资源的名称)。

所以,在您调用的API函数中一定有类似窗体句柄这样的参数,那么当您声明这个函数时,您应该将它显式地声明为IntPtr类型。

例如,在一个C#程序中调用Win32API mciSendString函数控制光盘驱动器,这个函数的函数原型是:

MCIERROR mciSendString(

LPCTSTR lpszCommand,

LPTSTR lpszReturnString,

UINT cchReturn,

HANDLE hwndCallback

);

首先在C#中声明这个函数:

[DllImport("winmm.dll")]

private static extern long mciSendString(string a,string b,uint c,IntPtr d);

然后用这样的方法调用:

mciSendString("set cdaudio door open", null, 0, this.Handle);

//----------------------------------------------------------------------------//  Copyright (C) 2004-2019 by EMGU Corporation. All rights reserved.       //----------------------------------------------------------------------------
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using Emgu.CV;using Emgu.CV.CvEnum;using Emgu.CV.Structure;using Emgu.Util;
namespace CameraCapture{   public partial class CameraCapture : Form   {      private VideoCapture _capture = null;      private bool _captureInProgress;      private Mat _frame;      private Mat _grayFrame;      private Mat _smallGrayFrame;      private Mat _smoothedGrayFrame;      private Mat _cannyFrame;
     public CameraCapture()      {         InitializeComponent();      //使用显卡处理图像数据效率会很多,如果你的设备支持,最好打开,使用CvInvoke.HaveOpenCLCompatibleGpuDevice能返回是否支持.       // 配置CvInvoke.UseOpenCL能让OpenCV 启用或者停用 GPU运算      //CvInvoke.UseOpenCL = CvInvoke.HaveOpenCLCompatibleGpuDevice;            CvInvoke.UseOpenCL = false;         try         {           //构造一个摄像头实例,如果调用本地摄像机则括号里面为空           _capture = new VideoCapture(@"C:\Users\Administrator\Desktop\video\vtest.avi");           _capture.ImageGrabbed += ProcessFrame;//图像捕捉事件          }         catch (NullReferenceException excpt)         {            MessageBox.Show(excpt.Message);         }         _frame = new Mat();         _grayFrame = new Mat();         _smallGrayFrame = new Mat();         _smoothedGrayFrame = new Mat();         _cannyFrame = new Mat();      }
     private void ProcessFrame(object sender, EventArgs arg)      {        if (_capture != null && _capture.Ptr != IntPtr.Zero)           // if (_capture != null)            {        _capture.Retrieve(_frame, 0);
       CvInvoke.CvtColor(_frame, _grayFrame, ColorConversion.Bgr2Gray);
       CvInvoke.PyrDown(_grayFrame, _smallGrayFrame);            //进行高斯向下采样,执行高斯金字塔分解步骤向下采样。固定原图像,            //删除指定行和列(可以全为奇数行和列,或者偶数行和列...),从而减小图像的宽度和高度。
       CvInvoke.PyrUp(_smallGrayFrame, _smoothedGrayFrame);      //执行高斯金字塔分解向上采样,首先透过注入固定行和列0像素值,在通过插值算法,对插入行列进行插值,这样用于放大原图像的四倍。      //参数解析:IInputArraysrc:输入图像,即原图像。IOutputArraydst:输出图像,采样后得到的图像。
       CvInvoke.Canny(_smoothedGrayFrame, _cannyFrame, 100, 60);        //多级边缘检测算法
        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;         }      }      //Dispose意为释放,释放组件所占用的内存。      //C#特性,为提高运行效率,自动会释放已使用过且不再需要使用的组件来减少程序的CPU使用率。      //默认会在程序运行一段时间后自动加载该Dispose方法,或者可以显式的自行调用此方法。     private void ReleaseData()      {            if (_capture != null)                _capture.Dispose();
     }
     private void FlipHorizontalButtonClick(object sender, EventArgs e)      {            // 得到和设置Capture类是否进行水平翻转。
        if (_capture != null) _capture.FlipHorizontal = !_capture.FlipHorizontal;      }
     private void FlipVerticalButtonClick(object sender, EventArgs e)      {         if (_capture != null) _capture.FlipVertical = !_capture.FlipVertical;      }   }}


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net