昨天做了个小测试,把我之前写的用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框架打开摄像头(续)相关推荐

  1. C# 使用AForge调用笔记本摄像头拍照及录像

    文章目录 1.添加引用 2.AForge相关类库介绍 3.WinForm界面实现 4.属性 5.窗口加载与关闭 6.实例化 7. 摄像头的连接读取与关闭 8.拍照与保存 9.录像 10.计时器 11. ...

  2. C#打开摄像头后获取图片,调用face_recognition进行人脸识别

    运行效果如截图:左边和保存的图片做对比,打印相似度,部分打印内容为python中的打印输出,可以用来做结果判断.右边打开摄像头后,可以单张图片进行人脸识别,或者一直截图镜头中的图片进行比对.期中pyt ...

  3. OpenCV中使用类VideoCapture加载视频和打开摄像头

    先直接上示例代码,然后对代码进行讲解. #!/usr/bin/env python # -*- coding: utf-8 -*- # 图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 248 ...

  4. WPF中通过AForge实现USB摄像头拍照

    最近由于某种原因呢,需要做一下拍照的功能,本来我纠结到底用AForge类库还是用WPFMediaKit.dll ,不过后来看网上说WPFMediaKit.dll 是截图而AForge是直接通过摄像头拍 ...

  5. java jmf获取图像_用JMF打开摄像头获取图像

    今天学习用JAVA中的JMF来打开摄像头,这个小程序对我来说还是有点难度的.然后我在网上找的一些资料,网上的资料很多而且比较杂,对于我们新人来说,没有分辨能力,走了很多弯路.下面我把我的学习过程展示出 ...

  6. load opencv videoio gstreamer453 64d dll failed 打开摄像头慢

    环境:win10+opencv4.5.3+opencv_contrib-4.5.3+vs2019 状态:禁用笔记本自带摄像头,使用webcam 问题 配置好opencv和contrib库后,通过ope ...

  7. winform中实现打开摄像头+识别条形码和二维码

    我们去菜鸟驿站拿快递的时候,需要我们把自己的快递拿到扫描台上扫下,表示包裹已出库.今天我们就来实现这个功能,基于winform程序开发快递单的扫描和识别,顺便也识别下二维码.用到的组件有2个,分别是A ...

  8. 用JAVA中的JMF来打开摄像头

       今天学习用JAVA中的JMF来打开摄像头,这个小程序对我来说还是有点难度的.然后我在网上找的一些资料,网上的资料很多而且比较杂,对于我们新人来说,没有分辨能力,走了很多弯路.下面我把我的学习过程 ...

  9. OpenCV 错误:无法打开摄像头(打开摄像头卡机)

    一开始的情况: 摄像头卡死了,无法打开. 错误原因:摄像头没有设置每帧的时间间隔. 设置读取帧的时间,必须要加入以下内容: # q键退出(设置读帧间隔时间)cv2.waitKey(1) # 摄像头每帧 ...

最新文章

  1. 6步傻瓜式点击在树莓派上安好Win11
  2. 大型系统OA--技术
  3. cryptogen (1)generate 生成证书举例
  4. python穷举法搬砖_python 穷举法 算24点(史上最简短代码)-阿里云开发者社区
  5. PHP Curl多线程原理实例详解
  6. ResourceManager中的Resource Estimator框架介绍与算法剖析
  7. 使用自定义卫语句写出更简洁的代码
  8. 如何踩中下一个技术节拍
  9. python求斜边上的高_直角三角形斜边上的高如何求?
  10. pod 文件管理服务器,k8s中pod的状态管理
  11. taptap解析安装包出错_光遇解析软件包出现问题怎么解决 安装失败原因解答
  12. 职业与生活规划是否必要?回答因人而异。但规划至少会给人带来以下好处。
  13. CDS View-Part8Part9Part10Part16 内置函数
  14. 五:Dubbo中Provider参数配置及源码讲解
  15. vlc在C#的使用方法
  16. Java整点报时定时器
  17. 刻录光盘的结构及原理
  18. OV7670 摄像头模块介绍
  19. SPSS学习(2)之数据窗口常用操作技巧
  20. crypto++(cryptopp)加密库aes算法的使用

热门文章

  1. 6岁小男孩舍身救妹 下巴被马咬掉(图)
  2. 人人都是项目经理,但不是每个人都能管好项目...
  3. 一代霸主浏览器,彻底凉凉!
  4. 终极英语全能王 v2.58 免费
  5. bzoj2309 CTSC2011 字符串重排
  6. 什么是插入损耗和回波损耗?
  7. 绍兴市×××局虚拟化容灾设备项目100万
  8. 【四万字总结】对于HTML5的一些总结与实践
  9. 拍照翻译神器app哪个好?这些拍照翻译神器可以看看
  10. 关于单片机编程中有一段{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}