OpenCVSharp入门教程 基础篇③——从本地摄像头获取媒体流

亦凉 2023-01-23 07:53 874阅读 0赞

文章目录

  • 一、界面布局
  • 二、功能实现
    • 2.1 打开摄像头
    • 2.2 运行摄像头后台任务
  • 三、异常报错
  • 四、运行
  • 五、Demo源码

一、界面布局

  • 两个Button
  • 一个PictureBox
  • 一个BackgroundWorker cameraWorker
    在这里插入图片描述

二、功能实现

2.1 打开摄像头

  • 打开摄像头
  • 判断摄像头是否打开,否:提示并退出
  • 摄像头后台任务cameraWorker开始运行

    private void openCameraBtn_Click(object sender, EventArgs e)
    {

    1. if (cameraWorker.IsBusy)
    2. {
    3. closeCamera();
    4. }
    5. else
    6. {
    7. openCamera();
    8. }

    }

    private void openCamera()
    {

    1. capture.Open(0, VideoCaptureAPIs.ANY);
    2. if (!capture.IsOpened())
    3. {
    4. Close();
    5. MessageBox.Show("打开摄像头失败");
    6. return;
    7. }
    8. openCameraBtn.Text = "关闭摄像头";
    9. cameraWorker.RunWorkerAsync();

    }

    private void closeCamera()
    {

    1. openCameraBtn.Text = "打开摄像头";
    2. cameraWorker.CancelAsync();
    3. capture.Release();
    4. pictureBox1.Image = null;

    }

2.2 运行摄像头后台任务

  • while死循环
  • 获取摄像头frameMat
  • 转换成Bitmap
  • 复制给pictureBox1

    private void cameraWorker_DoWork(object sender, DoWorkEventArgs e)
    {

    1. var bgWorker = (BackgroundWorker)sender;
    2. while (!bgWorker.CancellationPending)
    3. {
    4. using (var frameMat = capture.RetrieveMat())
    5. {
    6. var frameBitmap = BitmapConverter.ToBitmap(frameMat);
    7. bgWorker.ReportProgress(0, frameBitmap);
    8. }
    9. Thread.Sleep(100);
    10. }

    }

    private void cameraWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {

    1. var frameBitmap = (Bitmap)e.UserState;
    2. pictureBox1.Image?.Dispose();
    3. pictureBox1.Image = frameBitmap;

    }

三、异常报错

  1. System.TypeInitializationException:““OpenCvSharp.Internal.NativeMethods”的类型初始值设定项引发异常。”
  2. 内部异常
  3. DllNotFoundException: 无法加载 DLLOpenCvSharpExtern”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

因为还少了一点dll

  • 点击下载OpenCVSharp dll.zip
  • 放到\bin\Debug\下面
    在这里插入图片描述

四、运行

  • 堪称完美
    在这里插入图片描述

五、Demo源码

OpenCVSharpDemo工程源码点击下载

觉得好,就一键三连呗(点赞+收藏+关注)

发表评论

表情:
评论列表 (有 0 条评论,874人围观)

还没有评论,来说两句吧...

相关阅读