编辑
2025-09-26
C#
00

目录

摘要
正文

摘要

在现代计算机视觉领域中,使用OpenCVSharp调用本地摄像头是一项非常重要的技能。OpenCVSharp是一个跨平台的开源计算机视觉库,它支持多种编程语言,包括C++、Python、Java等。本文将介绍如何使用C# 下OpenCVSharp调用本地摄像头,并介绍相关的基本类和API。

使用OpenCvSharp调用本地摄像头,用到基本类

VideoCapture类

  • VideoCapture(string filename):构造函数,用于打开视频文件。
  • VideoCapture(int device):构造函数,用于打开摄像头设备,其中device是摄像头的索引。
  • IsOpened():检查VideoCapture是否成功打开。
  • Read(Mat frame):读取下一帧视频并将其存储在Mat对象中。
  • Release():释放VideoCapture对象和相关资源。

正文

nuget 安装 OpenCVSharp4

这里OpenCvSharp4.runtime.win 库需要引用,不然会报错

DllNotFoundException: Unable to load DLL 'OpenCvSharpExtern' or one of its dependencies

OpenCvSharp.Extensions 库

image.png

image.png

一个例子

image.png

C#
public partial class Form1 : Form { private VideoCapture capture; public Form1() { InitializeComponent(); } private void btnOpen_Click(object sender, EventArgs e) { // 打开摄像头(通常是默认摄像头) capture = new VideoCapture(0); // 检查摄像头是否成功打开 if (!capture.IsOpened()) { MessageBox.Show("无法打开摄像头"); Close(); return; } // 设置视频帧捕获事件 Task.Run(()=>{ ProcessFrame(); }); } private void ProcessFrame() { while (true) { Mat frame = new Mat(); capture.Read(frame); if (!frame.Empty()) { // 在PictureBox中显示捕获的视频帧 pic.Image = BitmapConverter.ToBitmap(frame); } } } private void btnClose_Click(object sender, EventArgs e) { // 释放资源并停止捕获 if (capture != null && capture.IsOpened()) { capture.Release(); } } }

增加一个截图功能

image.png

C#
private void btnCapture_Click(object sender, EventArgs e) { // 检查摄像头是否已经打开 if (capture == null || !capture.IsOpened()) { MessageBox.Show("请先打开摄像头"); return; } // 创建一个Mat对象来存储截图 Mat screenshot = new Mat(); // 读取当前视频帧并将其复制到截图Mat capture.Read(screenshot); // 检查截图是否为空 if (!screenshot.Empty()) { // 为截图生成一个唯一的文件名 string timestamp = DateTime.Now.ToString("yyyyMMddHHmmssfff"); string screenshotFileName = $"screenshot_{timestamp}.png"; // 保存截图为图像文件 screenshot.SaveImage(screenshotFileName); // 可以选择在窗口中显示截图 // pictureBox.Image = BitmapConverter.ToBitmap(screenshot); MessageBox.Show($"截图已保存为 {screenshotFileName}"); } }

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!