C# 大华相机图像采集 超、凢脫俗 2021-12-03 04:35 1009阅读 0赞 using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Threading; using System.Windows.Forms; using ThridLibray; namespace _1_5相机SDK图像采集 { public class Camera { List<IGrabbedRawData> m_frameList = new List<IGrabbedRawData>(); /* 图像缓存列表 */ Thread renderThread = null; /* 显示线程 */ bool m_bShowLoop = true; /* 线程控制变量 */ Mutex m_mutex = new Mutex(); /* 锁,保证多线程安全 */ public event Action<Bitmap> NewImage; public Camera() { if (null == renderThread) { renderThread = new Thread(new ThreadStart(ShowThread)); renderThread.IsBackground = true; renderThread.Start(); } } /* 转码显示线程 */ private void ShowThread() { while (m_bShowLoop) { if (m_frameList.Count == 0) { Thread.Sleep(1); continue; } /* 图像队列取最新帧 */ m_mutex.WaitOne(); IGrabbedRawData frame = m_frameList.ElementAt(0); m_frameList.RemoveAt(0); m_frameList.Clear(); m_mutex.ReleaseMutex(); /* 主动调用回收垃圾 */ GC.Collect(); try { /* 图像转码成bitmap图像 */ var bitmap = frame.ToBitmap(false); if (NewImage!=null) { NewImage(bitmap); } } catch (Exception exception) { Catcher.Show(exception); } } } /* 设备对象 */ private IDevice m_dev; /* 相机打开回调 */ private void OnCameraOpen(object sender, EventArgs e) { MessageBox.Show("相机已打开!"); } /* 相机关闭回调 */ private void OnCameraClose(object sender, EventArgs e) { MessageBox.Show("相机已关闭!"); } /* 相机丢失回调 */ private void OnConnectLoss(object sender, EventArgs e) { m_dev.ShutdownGrab(); m_dev.Dispose(); m_dev = null; } public void btnOpen() { try { /* 设备搜索 */ List<IDeviceInfo> li = Enumerator.EnumerateDevices(); if (li.Count > 0) { /* 获取搜索到的第一个设备 */ m_dev = Enumerator.GetDeviceByIndex(0); /* 注册链接事件 */ m_dev.CameraOpened += OnCameraOpen; m_dev.CameraClosed += OnCameraClose; /* 打开设备 */ if (!m_dev.Open()) { MessageBox.Show(@"连接相机失败"); return; } /* 打开Software Trigger */ m_dev.TriggerSet.Open(TriggerSourceEnum.Software); /* 设置图像格式 */ using (IEnumParameter p = m_dev.ParameterCollection[ParametrizeNameSet.ImagePixelFormat]) { p.SetValue("Mono8"); } /* 设置曝光 */ using (IFloatParameter p = m_dev.ParameterCollection[ParametrizeNameSet.ExposureTime]) { p.SetValue(1000); } /* 设置增益 */ using (IFloatParameter p = m_dev.ParameterCollection[ParametrizeNameSet.GainRaw]) { p.SetValue(1.0); } /* 设置缓存个数为8(默认值为16) */ m_dev.StreamGrabber.SetBufferCount(8); /* 注册码流回调事件 */ m_dev.StreamGrabber.ImageGrabbed += OnImageGrabbed; /* 开启码流 */ if (!m_dev.GrabUsingGrabLoopThread()) { MessageBox.Show(@"开启码流失败"); return; } } } catch (Exception exception) { Catcher.Show(exception); } } /* 码流数据回调 */ private void OnImageGrabbed(Object sender, GrabbedEventArgs e) { m_mutex.WaitOne(); m_frameList.Add(e.GrabResult.Clone()); m_mutex.ReleaseMutex(); } /* 停止码流 */ public void btnClose() { try { if (m_dev == null) { throw new InvalidOperationException("Device is invalid"); } m_dev.StreamGrabber.ImageGrabbed -= OnImageGrabbed; /* 反注册回调 */ m_dev.ShutdownGrab(); /* 停止码流 */ m_dev.Close(); /* 关闭相机 */ } catch (Exception exception) { Catcher.Show(exception); } } /* 窗口关闭 */ public void OnClosed(EventArgs e) { if (m_dev != null) { m_dev.Dispose(); m_dev = null; } m_bShowLoop = false; renderThread.Join(); } /* 执行软触发 */ public void SoftwareTrigger() { if (m_dev == null) { throw new InvalidOperationException("Device is invalid"); } try { m_dev.ExecuteSoftwareTrigger(); } catch (Exception exception) { Catcher.Show(exception); } } } } 转载于:https://www.cnblogs.com/BKYZFSN/p/11027417.html
相关 Python OpenCV相机参数详解:实现准确的相机标定和图像处理 Python OpenCV相机参数详解:实现准确的相机标定和图像处理 在计算机视觉领域,相机参数是非常重要的元素。通过相机参数的标定,可以将图像中的像素坐标转化为真实世界中的 蔚落/ 2024年03月25日 22:32/ 0 赞/ 36 阅读
相关 C# 联合Halcon开发的镀锌组装包装程序一整套源码(相机点胶定位,图像采集,数据查询相机间通讯(socket)) C\ 联合Halcon开发的镀锌组装包装程序一整套源码(相机点胶定位,图像采集,数据查询相机间通讯(socket)) [点我下载完整项目源码][Link 1] 运行效果 逃离我推掉我的手/ 2024年03月08日 04:23/ 0 赞/ 66 阅读
相关 海康相机-SDK二次开发(NVR)-多相机IPCamera连接采集-opencv图像格式转换 主要功能: 海康SDK开发,通过连接NVR,实现连接NVR的2个相机同时采集(多线程),并进行opencv图像格式转换。 关键技术点: 1、回调函数 2、YV12->o 灰太狼/ 2023年06月28日 08:47/ 0 赞/ 10 阅读
相关 基于图像的相机定位/SLAM分类 基于图像的相机定位指在某个世界坐标系下,根据相机捕获的图像或视频来计算相机的位姿。如图 1 所示,前端对相机捕获的图像进行实时处理,并利用后端提供的地图点数据实时估计相机的位姿 浅浅的花香味﹌/ 2023年02月17日 02:53/ 0 赞/ 169 阅读
相关 MIL图像库的使用——配合图像采集卡 目录 一、软硬件介绍 二、Qt中导入MIL库 三、相机的默认配置,DCF文件的使用 四、MIL和Qt之间的数据转换 4.1 MIL\_INT转Int 4.2 QSt 谁践踏了优雅/ 2023年01月16日 14:23/ 0 赞/ 457 阅读
相关 Halcon-图像视频采集 当相机环境配置好后,就可以进行图像和视频数据的采集了。图像视频的采集是机器视觉的输入项,采集图像的速度和质量会直接影响图像处理的效率。 1.读取图像文件 单张和批量读取:r 待我称王封你为后i/ 2023年01月08日 08:24/ 0 赞/ 170 阅读
相关 C/C++编程:大华摄像头获取yuv数据 // DecCallBack.cpp : Defines the entry point for the console application. // 旧城等待,/ 2022年12月10日 04:51/ 0 赞/ 192 阅读
相关 如何来选购图像采集卡 如何来选购图像采集卡 在选购及使用图像采集卡时,需要考虑的两个关键性的因素为:硬件的可靠性以及软件的支持。在其它条件都同等的情况下,一块复杂具有更多器件的卡会比器件较少的卡耗 心已赠人/ 2022年05月23日 02:50/ 0 赞/ 256 阅读
相关 图像坐标系,相机坐标系和世界坐标系 对于图像坐标系,相机坐标系和世界坐标系的学习和自己的一些理解,如果有错误欢迎指正和讨论。 图像坐标系 ![这里写图片描述][SouthEast] 1.图像像素坐标系 绝地灬酷狼/ 2022年05月11日 21:50/ 0 赞/ 372 阅读
相关 C# 大华相机图像采集 using System; using System.Collections.Generic; using System.Drawing; us 超、凢脫俗/ 2021年12月03日 04:35/ 0 赞/ 1010 阅读