C#使用aforge框架打开摄像头(续)
昨天做了个小测试,把我之前写的用aforge框架打开摄像头的小程序,运行了一晚上,结果今天早上起来发现,程序挂了。调试了好几次,也没找到原因。
--------------------------问题
刚刚 又做了测试,同时打开任务管理器,发现,该程序运行时间稍长,内存就开始紧张了。 如图:
我今天特意做了记录,当程序运行了3.5小时左右,程序就炸了,无响应,查看此时其所占内存高达2G多。这下就苦恼了。
--------------------------解决方案
东查西找,群里问,谷歌搜,终于在群里问到了解决方案。
在摄像头捕获到每一帧图像后,做好系统资源回收。
--------------------------关键代码
这里的代码,和我之前的笔记中的是一样的。下面是关键代码:
///------自定义函数,捕获每一帧图像并显示private void Cam_NewFrame(object obj, NewFrameEventArgs eventArgs){catchBtn.Visible = true;//pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();//bm = (Bitmap)eventArgs.Frame.Clone();bm = (Bitmap)eventArgs.Frame.Clone();pictureBox1.Image = bm;///-----!!!!!!!!!!!!!! 注意,解决我的内存问题的代码就是下面的这一行///---回收资源GC.Collect();///---throw new NotImplementedException();}
就是这句
GC.Collect();
苦恼了我一天时间呢。 但是还是解决啦 。
正在测试其能最长运行时间。
--------------------------完整源码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
///---添加名称空间
using AForge.Video.DirectShow;
using AForge.Video;
using AForge;
using System.Threading;namespace OS_webcam
{public partial class Form1 : Form{public Form1(){InitializeComponent();}///---声明变量public FilterInfoCollection USE_Webcams = null;public VideoCaptureDevice cam = null;public Bitmap bm = null;//---按钮被单击事件private void startBtn_Click(object sender, EventArgs e){try{Thread myThread = new Thread(MyThreadFunc);myThread.Start();}catch (Exception ex){MessageBox.Show(ex.Message);}}private void MyThreadFunc(){if (startBtn.Text == "开始"){///--startBtn.Text = "停止";///---启动摄像头cam.Start();}else{///--设置按钮提示字样startBtn.Text = "开始";///--停止摄像头捕获图像cam.Stop();}}//--窗口加载事件private void Form1_Load(object sender, EventArgs e){try{catchBtn.Visible = false;///---实例化对象USE_Webcams = new FilterInfoCollection(FilterCategory.VideoInputDevice);///---摄像头数量大于0if (USE_Webcams.Count > 0){///---禁用按钮startBtn.Enabled = true;///---实例化对象cam = new VideoCaptureDevice(USE_Webcams[0].MonikerString);///--关键cam.VideoResolution = cam.VideoCapabilities[0];///---绑定事件cam.NewFrame += new NewFrameEventHandler(Cam_NewFrame);}else{///--没有摄像头startBtn.Enabled = false;///---提示没有摄像头MessageBox.Show("没有摄像头外设");}}catch (Exception ex){MessageBox.Show(ex.Message);}}///------自定义函数,捕获每一帧图像并显示private void Cam_NewFrame(object obj, NewFrameEventArgs eventArgs){catchBtn.Visible = true;//pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();//bm = (Bitmap)eventArgs.Frame.Clone();bm = (Bitmap)eventArgs.Frame.Clone();pictureBox1.Image = bm;///-----!!!!!!!!!!!!!! 注意,解决我的内存问题的代码就是下面的这一行///---回收资源GC.Collect();///---throw new NotImplementedException();}///---窗口关闭事件private void Form1_FormClosed(object sender, FormClosedEventArgs e){try{if (cam != null){///---关闭摄像头if (cam.IsRunning){cam.Stop();}}}catch (Exception ex){MessageBox.Show(ex.Message);}}private void catchBtn_Click(object sender, EventArgs e){try{if (cam.IsRunning){///---设置图像的名称和格式。string filepath =Application.StartupPath + DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss") + ".png";bm.Save(filepath);///---保存成功MessageBox.Show("捕捉图像保存成功");}}catch (Exception ex){MessageBox.Show(ex.Message);}}private void descriBtn_Click(object sender, EventArgs e){MessageBox.Show("版本:1.0\n\n作者:ROOTKIT^_^");}}
}
C#使用aforge框架打开摄像头(续)相关推荐
- C# 使用AForge调用笔记本摄像头拍照及录像
文章目录 1.添加引用 2.AForge相关类库介绍 3.WinForm界面实现 4.属性 5.窗口加载与关闭 6.实例化 7. 摄像头的连接读取与关闭 8.拍照与保存 9.录像 10.计时器 11. ...
- C#打开摄像头后获取图片,调用face_recognition进行人脸识别
运行效果如截图:左边和保存的图片做对比,打印相似度,部分打印内容为python中的打印输出,可以用来做结果判断.右边打开摄像头后,可以单张图片进行人脸识别,或者一直截图镜头中的图片进行比对.期中pyt ...
- OpenCV中使用类VideoCapture加载视频和打开摄像头
先直接上示例代码,然后对代码进行讲解. #!/usr/bin/env python # -*- coding: utf-8 -*- # 图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 248 ...
- WPF中通过AForge实现USB摄像头拍照
最近由于某种原因呢,需要做一下拍照的功能,本来我纠结到底用AForge类库还是用WPFMediaKit.dll ,不过后来看网上说WPFMediaKit.dll 是截图而AForge是直接通过摄像头拍 ...
- java jmf获取图像_用JMF打开摄像头获取图像
今天学习用JAVA中的JMF来打开摄像头,这个小程序对我来说还是有点难度的.然后我在网上找的一些资料,网上的资料很多而且比较杂,对于我们新人来说,没有分辨能力,走了很多弯路.下面我把我的学习过程展示出 ...
- load opencv videoio gstreamer453 64d dll failed 打开摄像头慢
环境:win10+opencv4.5.3+opencv_contrib-4.5.3+vs2019 状态:禁用笔记本自带摄像头,使用webcam 问题 配置好opencv和contrib库后,通过ope ...
- winform中实现打开摄像头+识别条形码和二维码
我们去菜鸟驿站拿快递的时候,需要我们把自己的快递拿到扫描台上扫下,表示包裹已出库.今天我们就来实现这个功能,基于winform程序开发快递单的扫描和识别,顺便也识别下二维码.用到的组件有2个,分别是A ...
- 用JAVA中的JMF来打开摄像头
今天学习用JAVA中的JMF来打开摄像头,这个小程序对我来说还是有点难度的.然后我在网上找的一些资料,网上的资料很多而且比较杂,对于我们新人来说,没有分辨能力,走了很多弯路.下面我把我的学习过程 ...
- OpenCV 错误:无法打开摄像头(打开摄像头卡机)
一开始的情况: 摄像头卡死了,无法打开. 错误原因:摄像头没有设置每帧的时间间隔. 设置读取帧的时间,必须要加入以下内容: # q键退出(设置读帧间隔时间)cv2.waitKey(1) # 摄像头每帧 ...
最新文章
- 6步傻瓜式点击在树莓派上安好Win11
- 大型系统OA--技术
- cryptogen (1)generate 生成证书举例
- python穷举法搬砖_python 穷举法 算24点(史上最简短代码)-阿里云开发者社区
- PHP Curl多线程原理实例详解
- ResourceManager中的Resource Estimator框架介绍与算法剖析
- 使用自定义卫语句写出更简洁的代码
- 如何踩中下一个技术节拍
- python求斜边上的高_直角三角形斜边上的高如何求?
- pod 文件管理服务器,k8s中pod的状态管理
- taptap解析安装包出错_光遇解析软件包出现问题怎么解决 安装失败原因解答
- 职业与生活规划是否必要?回答因人而异。但规划至少会给人带来以下好处。
- CDS View-Part8Part9Part10Part16 内置函数
- 五:Dubbo中Provider参数配置及源码讲解
- vlc在C#的使用方法
- Java整点报时定时器
- 刻录光盘的结构及原理
- OV7670 摄像头模块介绍
- SPSS学习(2)之数据窗口常用操作技巧
- crypto++(cryptopp)加密库aes算法的使用
热门文章
- 6岁小男孩舍身救妹 下巴被马咬掉(图)
- 人人都是项目经理,但不是每个人都能管好项目...
- 一代霸主浏览器,彻底凉凉!
- 终极英语全能王 v2.58 免费
- bzoj2309 CTSC2011 字符串重排
- 什么是插入损耗和回波损耗?
- 绍兴市×××局虚拟化容灾设备项目100万
- 【四万字总结】对于HTML5的一些总结与实践
- 拍照翻译神器app哪个好?这些拍照翻译神器可以看看
- 关于单片机编程中有一段{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}