当前位置: 首页 > news >正文

openCV使用c#操作摄像头

效果如下:
在这里插入图片描述

1.创建一个winform的窗体项目(框架.NET Framework 4.7.2)
2.Nuget引入opencv的c#程序包(版本最好和我一致)
在这里插入图片描述
3.后台代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
using OpenCvSharp.Extensions;namespace opencv读取摄像头
{public partial class Form1 : Form{public Form1(){InitializeComponent();Control.CheckForIllegalCrossThreadCalls = false;//取消跨线程检查this.timer1.Start();}private VideoCapture capture;private bool isopen = false;private bool saveImgFlag = false;private string filePath = "";private void button1_Click(object sender, EventArgs e){capture = new VideoCapture(0);if (!capture.IsOpened()){MessageBox.Show("无法打开摄像头");return;}isopen = true;Thread video_th = new Thread(StartCapturing);video_th.IsBackground = true;video_th.Start();}public void StartCapturing(){Mat frame = new Mat();while (true){capture.Read(frame);//读取图像帧if (frame.Empty()){break;}Bitmap bitmap = BitmapConverter.ToBitmap(frame);if (saveImgFlag == true){try{bitmap.Save(filePath, ImageFormat.Jpeg);saveImgFlag = false;MessageBox.Show("保存成功!");}catch (Exception ex){}}pictureBox1.Image = bitmap;pictureBox1.Refresh();}}private void button2_Click(object sender, EventArgs e){SaveFileDialog saveFileDialog = new SaveFileDialog();// 设置对话框的标题saveFileDialog.Title = "Save Image";// 设置默认的文件名和文件类型过滤器saveFileDialog.FileName = DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");saveFileDialog.Filter = "Image files (*.Png)|*.Png|Image files (*.Jpg)|*.Jpg";// 显示对话框并获取用户的操作结果DialogResult result = saveFileDialog.ShowDialog();if (result == DialogResult.OK){// 用户点击了保存按钮filePath = saveFileDialog.FileName;//string filter=saveFileDialog.Filter;// 在这里进行保存文件的操作,例如:// File.WriteAllText(filePath, "Hello, world!");Console.WriteLine("File saved to: " + filePath);}else if (result == DialogResult.Cancel){// 用户点击了取消按钮Console.WriteLine("Save cancelled");}saveImgFlag = true;}private void timer1_Tick(object sender, EventArgs e){this.label1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");}}
}
http://www.lryc.cn/news/127572.html

相关文章:

  • Centos 防火墙命令
  • 【第二讲---初识SLAM】
  • C++ 面向对象三大特性——继承
  • LC-相同的树
  • RocketMQ部署 Linux方式和Docker方式
  • css内容达到最底部但滚动条没有滚动到底部
  • 机器学习深度学习——transformer(机器翻译的再实现)
  • 神经网络基础-神经网络补充概念-30-搭建神经网络块
  • 在线吉他调音
  • Windows11 Docker Desktop 启动 -wsl kernel version too low
  • Golang 中的 unsafe 包详解
  • linux 的swap、swappiness及kswapd原理【转+自己理解】
  • 什么是Java中的适配器模式?
  • MYSQL线上无锁添加索引
  • 如何实现客户自助服务?打造产品知识库
  • LeetCode环形子数组的最大和(编号918)
  • PhpOffice/PhpSpreadsheet读取和写入Excel
  • jenkins自动化部署Jenkinsfile文件配置
  • 【socket编程简述】TCP UDP 通信总结、TCP连接的三次握手、TCP断开的四次挥手
  • 多线程-死锁
  • P1006 [NOIP2008 提高组] 传纸条
  • 杭电比赛总结
  • dom靶场
  • go struct 的常见问题
  • Linux系统下的性能分析命令
  • 第十三课:QtCmd 命令行终端应用程序开发
  • Jmeter进阶使用:BeanShell实现接口前置和后置操作
  • 【知识分享】高防服务器的防御机制
  • 内网穿透-外远程连接中的RabbitMQ服务
  • 驱动DAY4 字符设备驱动分步注册和ioctl函数点亮LED灯