(三)MVS SDK采集图像C#
一、SDK基本结构二、调用流程SDK所占用的资源。由于该垃圾回收机制存在滞后性建议主动释放资源以保证资源及时被释放。可通过如下两种方式主动释放资源1方式1调用.NET的 Dispose()try { // ch:创建设备 | en:Create device device DeviceFactory.CreateDevice(deviceInfo); } catch (Exception e) { Console.WriteLine(e.Message); } finally { if (device ! null) { // ch:释放设备资源 | en:Dispose resource device.Dispose(); } }2方式2使用using命令释放资源// ch:创建设备 | en:Create device using (IDevice device DeviceFactory.CreateDevice(deviceInfo)) { // ch:打开设备 | en:Open device device.Open(); // ch:关闭设备 | en:Close device device.Close(); }三、具体使用方式示例1刷新设备列表枚举相机变量:设备枚举类型和设备列表枚举类型包括GigEDeviceUSBDevice可以自行添加//设备类型枚举 readonly DeviceTLayerType enumTLayerType DeviceTLayerType.MvGigEDevice | DeviceTLayerType.MvUsbDevice | DeviceTLayerType.MvGenTLGigEDevice | DeviceTLayerType.MvGenTLCXPDevice | DeviceTLayerType.MvGenTLCameraLinkDevice | DeviceTLayerType.MvGenTLXoFDevice; public ListIDeviceInfo deviceInfoList new ListIDeviceInfo();刷新相机public int RefreshDeviceList() { // ch:创建设备列表 | en:Create Device List int nRet DeviceEnumerator.EnumDevices(enumTLayerType, out deviceInfoList); if (nRet ! MvError.MV_OK) { //枚举失败返回 return nRet; } return MvError.MV_OK; }获取相机数量public int DeviceNum() { return deviceInfoList.Count; }2操作设备枚举到相机列表后具体操作那个相机以设备句柄作为依据结构体为IDevicepublic IDevice device null;如打开和关闭相机public int OpenDevice() { try { // ch:打开设备 | en:Open device device DeviceFactory.CreateDevice(deviceInfoList[index]); } catch (Exception ex) { return CREATEFAILED; } nRet device.Open(); if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public void CloseDevice() { // ch:关闭设备 | en:Close Device if (device ! null) { device.Close(); device.Dispose(); } }3参数设置设置参数要在打开相机之后开始取流之前。参数是通过属性树字符串命令设置的。属性树的命令参数在点击对应触发源时下方黄色可以看到也可以通过手册查询。分为节点名属性类型共有六种属性类型。Float型枚举类型Bool型整形String 类型和命令型并分别有读取和写入两种方法。如获取浮点型参数的C#函数public int GetFloatParam(in string key, out float valu) { IFloatValue floatValue; nRet device.Parameters.GetFloatValue(key, out floatValue); valu floatValue.CurValue; if (nRet MvError.MV_OK) { return nRet; } return nRet; }执行软触发相机复位等属于命令型如执行一次软触发执行软触发需要相机开启触发模式并选择触发源为软触发。C#函数public int SoftTriggerOnce() { // ch:触发命令 | en:Trigger command nRet device.Parameters.SetCommandValue(TriggerSoftware); if (nRet ! MvError.MV_OK) { return nRet; } return MvError.MV_OK; }以下为设置全部参数的C#函数public int GetFloatParam(in string key, out float valu) { IFloatValue floatValue; nRet device.Parameters.GetFloatValue(key, out floatValue); valu floatValue.CurValue; if (nRet MvError.MV_OK) { return nRet; } return nRet; } public int GetEnumParam(in string key, out string valu) { IEnumValue enumValue; nRet device.Parameters.GetEnumValue(key, out enumValue); valu enumValue.CurEnumEntry.Symbolic; if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public int GetBoolParam(in string key, out bool valu) { nRet device.Parameters.GetBoolValue(key, out bool value); valu value; if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public int GetIntParam(in string key, out long valu) { IIntValue value; nRet device.Parameters.GetIntValue(key, out value); valu value.CurValue; if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public int GetStringParam(in string key, out string valu) { IStringValue value; nRet device.Parameters.GetStringValue(key, out value); valu value.CurValue; if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public int SetEnumParam(in string key, uint valu) { nRet device.Parameters.SetEnumValue(key, valu); if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public int SetEnumParamByString(in string key, string valu) { nRet device.Parameters.SetEnumValueByString(key, valu); if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public int SetIntParam(in string key, long valu) { nRet device.Parameters.SetIntValue(key, valu); if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public int SetFloatParam(in string key, float valu) { nRet device.Parameters.SetFloatValue(key, valu); if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public int SetBoolParam(in string key, bool valu) { nRet device.Parameters.SetBoolValue(key, valu); if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public int SetStringParam(in string key, string valu) { nRet device.Parameters.SetStringValue(key, valu); if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public int SetCommandParam(in string key) { nRet device.Parameters.SetCommandValue(key); if (nRet ! MvError.MV_OK) { return nRet; } return nRet; }4开始取流和结束取流public int StartGrabbing() { // ch:开始采集 | en:Start Grabbing nRet device.StreamGrabber.StartGrabbing(); if (nRet ! MvError.MV_OK) { return nRet; } return nRet; } public int StopGrabbing() { // ch:停止采集 | en:Stop Grabbing nRet device.StreamGrabber.StopGrabbing(); if (nRet ! MvError.MV_OK) { return nRet; } return nRet; }5获取一张图像以超时退出得模式public int GetOneFrame() { nRet device.StreamGrabber.GetImageBuffer(1000, out frameOut); if (MvError.MV_OK ! nRet) { return nRet; } buff frameOut; return MvError.MV_OK; }6开始和停止录像public int StartRecordVideo(string path, float frameRate) { IIntValue intValue; IEnumValue enumValue; uint width; uint height; MvGvspPixelType pixelType; nRet device.Parameters.GetIntValue(Width, out intValue); if (nRet ! MvError.MV_OK) { return nRet; } width (uint)intValue.CurValue; nRet device.Parameters.GetIntValue(Height, out intValue); if (nRet ! MvError.MV_OK) { return nRet; } height (uint)intValue.CurValue; nRet device.Parameters.GetEnumValue(PixelFormat, out enumValue); if (nRet ! MvError.MV_OK) { // ShowErrorMsg(Get PixelFormat failed!, result); return nRet; } pixelType (MvGvspPixelType)enumValue.CurEnumEntry.Value; // ch:开始录像 | en:Start record RecordParam recordParam; recordParam.Width width; recordParam.Height height; recordParam.PixelType pixelType; recordParam.FrameRate frameRate; recordParam.BitRate 1000; recordParam.FormatType VideoFormatType.AVI; nRet device.VideoRecorder.StartRecord(path, recordParam); if (nRet ! MvError.MV_OK) { return nRet; } isRecord true; return nRet; } public int StopRecordVideo() { nRet device.VideoRecorder.StopRecord(); if (nRet ! MvError.MV_OK) { return nRet; } return nRet; }

相关新闻

如何快速掌握Seed-VC:5个实战技巧打造专业级语音克隆体验

如何快速掌握Seed-VC:5个实战技巧打造专业级语音克隆体验

如何快速掌握Seed-VC:5个实战技巧打造专业级语音克隆体验 【免费下载链接】seed-vc zero-shot voice conversion & singing voice conversion, with real-time support 项目地址: https://gitcode.com/GitHub_Trending/se/seed-vc Seed-VC是一个革命性的…

2026/7/10 21:48:29阅读更多 →
安装cuda toolkit

安装cuda toolkit

作用:内置nvcc,识别并编译gpu代码安装网址:搜索cuda tookit历史版本安装方式:安装类型选runfile,安装后利用图形化界面取消勾选安装驱动(如果已经有驱动)最后将环境变量写入~/.bashrc:export PA…

2026/7/10 21:48:29阅读更多 →
高效命令行媒体播放器:mpv完整配置与使用指南

高效命令行媒体播放器:mpv完整配置与使用指南

高效命令行媒体播放器:mpv完整配置与使用指南 【免费下载链接】mpv 🎥 Command line media player 项目地址: https://gitcode.com/GitHub_Trending/mp/mpv 在当今多媒体内容爆炸的时代,一个强大而灵活的视频播放器对于技术爱好者和普…

2026/7/10 21:48:29阅读更多 →
RAVR: Reference-Answer-guided Variational Reasoning for Large Language Models

RAVR: Reference-Answer-guided Variational Reasoning for Large Language Models

文章核心总结与翻译 一、主要内容 本文针对大型语言模型(LLMs)在强化学习(RL)优化中面临的核心挑战——难以采样高质量推理路径、易强化次优推理——提出了一种基于参考答案引导的变分推理框架(RAVR)。 核心问题:传统RL方法依赖模型已能以非忽视概率生成有效推理路径,…

2026/7/10 22:53:39阅读更多 →
从 Ladybird 的转型看开源项目的“成人礼”:放弃 SVN 与 C++ 的背后逻辑

从 Ladybird 的转型看开源项目的“成人礼”:放弃 SVN 与 C++ 的背后逻辑

从 Ladybird 的转型看开源项目的“成人礼”:放弃 SVN 与 C 的背后逻辑 在开源浏览器的浩瀚星海中,有一个名字近期格外耀眼,它不是因为发布了什么惊天动地的新功能,而是因为它做出了一个令许多开发者咋舌的决定:推倒重来…

2026/7/10 22:53:39阅读更多 →
底盘革新风起羊城,2026广州汽车底盘展锚定产业新航向

底盘革新风起羊城,2026广州汽车底盘展锚定产业新航向

底盘革新风起羊城,2026广州汽车底盘展锚定产业新航向当汽车产业告别单纯的动力竞赛,步入智能化的“下半场”,一个关乎车辆安全、操控与舒适的核心部件——底盘,正从幕后走向台前。它不再是简单的机械结构件,而是融合了…

2026/7/10 22:53:39阅读更多 →
安全加固:沙箱隔离与多租户防护实战

安全加固:沙箱隔离与多租户防护实战

安全加固:沙箱隔离与多租户防护实战 在多租户 Agent 平台上,Agent 可能需要执行用户输入的代码——SQL、Python、Shell 脚本。没有沙箱隔离,这就是直接的攻击面。这一章讲解如何通过沙箱隔离和多层防护,让平台安全运行。 一、为什么沙箱是多租户平台的"安全底线"…

2026/7/10 22:53:39阅读更多 →
STM32F429NI与A3910电机驱动开发实战指南

STM32F429NI与A3910电机驱动开发实战指南

1. 认识我们的硬件搭档:A3910与STM32F429NI在嵌入式开发领域,选择合适的硬件组合往往决定了项目的成败。A3910作为一款高性能电机驱动芯片,与STM32F429NI这款基于Arm Cortex-M4内核的微控制器搭配,能够构建出响应迅速、控制精准的…

2026/7/10 22:53:39阅读更多 →
国产大模型最后一块拼图(GLM-4-AllTools深度拆解)vs ChatGPT-4.5未发布功能泄露文档:中文结构化输出准确率高出22.6%,附可验证测试集

国产大模型最后一块拼图(GLM-4-AllTools深度拆解)vs ChatGPT-4.5未发布功能泄露文档:中文结构化输出准确率高出22.6%,附可验证测试集

更多请点击: https://kaifayun.com 第一章:国产大模型最后一块拼图:GLM-4-AllTools与ChatGPT-4.5的基准定位 GLM-4-AllTools 的发布标志着国产大模型在多模态理解、工具调用与复杂推理能力上实现关键突破,填补了中文生态中“自主…

2026/7/10 22:48:38阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/10 12:10:00阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/10 12:29:21阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/10 4:59:05阅读更多 →
浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比当你在浏览器地址栏敲入一个网址时,背后可能隐藏着一场关于"要不要重新下载资源"的精密博弈。这场博弈的裁判是HTTP缓存机制,而304状态码则是这场博弈…

2026/7/10 0:00:01阅读更多 →
RoboWits:面向创造性问题求解的双臂机器人认知推理基准

RoboWits:面向创造性问题求解的双臂机器人认知推理基准

1. 项目概述:这不是又一个机器人抓取数据集,而是一次对“思考力”的压力测试 RoboWits——这个名字里藏着两个关键信号:“Robo”直指物理世界中的具身智能体,“Wits”则毫不掩饰地指向人类最核心的认知能力:机敏、判断…

2026/7/10 0:00:01阅读更多 →
5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款专为Windows…

2026/7/10 0:00:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/10 13:39:09阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/10 22:20:33阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/10 17:29:22阅读更多 →