ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-07-13 18:30:24  阅读:1278  来源: 互联网

标签:void 入门教程 private frameBitmap cameraWorker pictureBox1 OpenCVSharp 摄像头


文章目录

一、界面布局

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

二、功能实现

2.1 打开摄像头

  • 打开摄像头
  • 判断摄像头是否打开,否:提示并退出
  • 摄像头后台任务cameraWorker开始运行
private void openCameraBtn_Click(object sender, EventArgs e)
{
    if (cameraWorker.IsBusy)
    {
        closeCamera();
    }
    else
    {
        openCamera();
    }
}

private void openCamera()
{
    capture.Open(0, VideoCaptureAPIs.ANY);
    if (!capture.IsOpened())
    {
        Close();
        MessageBox.Show("打开摄像头失败");
        return;
    }
    openCameraBtn.Text = "关闭摄像头";
    cameraWorker.RunWorkerAsync();
}

private void closeCamera()
{
    openCameraBtn.Text = "打开摄像头";
    cameraWorker.CancelAsync();
    capture.Release();
    pictureBox1.Image = null;
}

2.2 运行摄像头后台任务

  • while死循环
  • 获取摄像头frameMat
  • 转换成Bitmap
  • 复制给pictureBox1
private void cameraWorker_DoWork(object sender, DoWorkEventArgs e)
{
    var bgWorker = (BackgroundWorker)sender;

    while (!bgWorker.CancellationPending)
    {
        using (var frameMat = capture.RetrieveMat())
        {
            var frameBitmap = BitmapConverter.ToBitmap(frameMat);
            bgWorker.ReportProgress(0, frameBitmap);
        }
        Thread.Sleep(100);
    }
}

private void cameraWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    var frameBitmap = (Bitmap)e.UserState;
    pictureBox1.Image?.Dispose();
    pictureBox1.Image = frameBitmap;
}

三、异常报错

System.TypeInitializationException:““OpenCvSharp.Internal.NativeMethods”的类型初始值设定项引发异常。”

内部异常
DllNotFoundException: 无法加载 DLL“OpenCvSharpExtern”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

因为还少了一点dll

四、运行

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

五、Demo源码

OpenCVSharpDemo工程源码点击下载

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

标签:void,入门教程,private,frameBitmap,cameraWorker,pictureBox1,OpenCVSharp,摄像头
来源: https://blog.csdn.net/kangweijian/article/details/118706804

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有