在现代计算机视觉领域中,使用OpenCVSharp调用本地摄像头是一项非常重要的技能。OpenCVSharp是一个跨平台的开源计算机视觉库,它支持多种编程语言,包括C++、Python、Java等。本文将介绍如何使用C# 下OpenCVSharp调用本地摄像头,并介绍相关的基本类和API。
使用OpenCvSharp调用本地摄像头,用到基本类
VideoCapture类:
device
是摄像头的索引。Mat
对象中。nuget 安装 OpenCVSharp4
这里OpenCvSharp4.runtime.win 库需要引用,不然会报错
DllNotFoundException: Unable to load DLL 'OpenCvSharpExtern' or one of its dependencies
OpenCvSharp.Extensions 库
一个例子
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();
}
}
}
增加一个截图功能
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 许可协议。转载请注明出处!