海康工业相机功能模块-参数保存、加载、批量复制参数

2023-10-29

前言

前面一篇文章,讲了工业相机参数如何设置与获取,使用sdk能够将自己想要的参数快速的配置进自己的程序,但是,在实际使用中,我们会发现,sdk配置的参数似乎在断电只会就消失啦,不能实现断电生效???
软件开发过程中,只能够配置常见的参数,一些偏门的参数,非常见的相机调试参数,如何批量设置进相机、如果断电能够保存???
这一篇文章就是来介绍、解决这个问题

相机参数保存的快速方法

  • MVS如何操作

参考相机用户手册提供的方法,主要操作分为3步

  1. 修改参数后,通过User Set Selector 参数下拉选择其中一套User Set 参数,例如选择"User Set 1"(你的参数保存在哪里)
  2. 通过User Set default参数下拉选择其中一套User Set 参数,例如选择"User Set 1"(相机重新上电后,加载那套参数)
  3. 点击User Set Save 处的“Execute”,即可将参数保存到用户参数中(实际有效的保存操作)
    在这里插入图片描述
  • sdk接口如何调用-UserSetSave方法
    参考在MVS里面的操作,主要是三句话的调用
//初始化部分,放在Opendevice之后即可
nRet = MV_CC_SetEnumValue(handle, "UserSetSelector", 1);
if (MV_OK != nRet)
{
	printf("error: SetEnumValue UserSetSelector fail [%x]\n", nRet);
}
nRet = MV_CC_SetEnumValue(handle, "UserSetDefault", 1);
if (MV_OK != nRet)
{
	printf("error: SetEnumValue UserSetDefault fail [%x]\n", nRet);
}
//设置Command型节点-发送参数保存命令
//大部分参数修改完成后,调用此命令进行保存,不建议频繁调用
nRet = MV_CC_SetCommandValue(m_handle, "UserSetSave");
if (MV_OK != nRet)
{
	printf("error: SetCommandValue fail [%x]\n", nRet);
}

相机参数导入导出的操作方法

UserSetLoad 加载相机内部参数

  1. 方法1: UserSetLoad 加载相机内部参数
    上面讲了,使用UserSetSave方法,相机支持3套用户参数保存,那么我们可以将不同的参数保存到不同的UserSetSelector里面,然后使用UserSetLoad 把参数再调出来,实现不同参数组合的切换
    代码实现也很简单
    参数保存,参考上面的伪代码,参数加载如下:
nRet = MV_CC_SetEnumValue(handle, "UserSetSelector", 1);//切换不同的参数组
if (MV_OK != nRet)
{
	printf("error: SetEnumValue UserSetSelector fail [%x]\n", nRet);
}
nRet = MV_CC_SetCommandValue(m_handle, "UserSetLoad");//load
if (MV_OK != nRet)
{
	printf("error: SetCommandValue fail [%x]\n", nRet);
}

FeatureLoad/FeatureSave

  1. 方法2:FeatureLoad/FeatureSave
    参考MVS提供的示例程序:C:\Program Files (x86)\MVS\Development\Samples\VC\VS\SimpleSamples\ParametrizeCamera_LoadAndSave
    关键代码:
 // ch:打开设备 | en:Open device
        nRet = MV_CC_OpenDevice(handle);
        if (MV_OK != nRet)
        {
            printf("Open Device fail! nRet [0x%x]\n", nRet);
            break;
        }
        printf("Start export the camera properties to the file\n");
        printf("Wait......\n");
        // ch:将相机属性导出到文件中 | en:Export the camera properties to the file
        nRet = MV_CC_FeatureSave(handle, "FeatureFile.ini");
        if (MV_OK != nRet)
        {
            printf("Save Feature fail! nRet [0x%x]\n", nRet);
            break;
        }
        printf("Finish export the camera properties to the file\n\n");
        //--------------------------------------------------------------------------
        printf("Start import the camera properties from the file\n");
        printf("Wait......\n");
        // ch:从文件中导入相机属性 | en:Import the camera properties from the file
        nRet = MV_CC_FeatureLoad(handle, "FeatureFile.ini");
        if (MV_OK != nRet)
        {
            printf("Load Feature fail! nRet [0x%x]\n", nRet);
            break;
        }
        printf("Finish import the camera properties from the file\n");
        // ch:关闭设备 | Close device
        nRet = MV_CC_CloseDevice(handle);
        if (MV_OK != nRet)
        {
            printf("ClosDevice fail! nRet [0x%x]\n", nRet);
            break;
        }

调用MV_CC_FeatureSave接口,可以将相机参数导出到本地,形成一个.ini结尾的文件,打开这个文件可以看见相机的参加参数,例如曝光、增益等
在这里插入图片描述
修改这个文件中的你想要修改的参数值,再调用MV_CC_FeatureLoad可以重新导入修改之后的参数
如果是批量应用的话,事先导出一份ini文件,然后使用FeatureLoad的接口,就可以实现批量化的参数设置,减少人员调试

当然,这个功能暂时也有几个缺点:

  • 只能导出部分参数,只能导出Streamable属性为YES的参数,为NO的参数无法导出,这个属性取决于相机,相机支持就能导出;目前根据观察,海康大部分相机的常见参数,都是YES啦,因此,也无需更多的关心这个问题
    在这里插入图片描述
  • 不同固件版本、不同相机型号,ini文件不能互相导入
  • 无法与MVS客户端互相兼容,MVS不支持ini文件导入

FileAccess 功能

  • 方法3:FileAccess 功能
    这个功能,是将方法1中的userset参数读出与重新写入,不过,导出来的文件是bin文件,不能够被直接阅读与修改
    示例程序:C:\Program Files (x86)\MVS\Development\Samples\VC\VS\SimpleSamples\ParametrizeCamera_FileAccess
    关键代码:
MV_CC_FILE_ACCESS stFileAccess = {0};

    stFileAccess.pUserFileName = "UserSet1.bin";
    stFileAccess.pDevFileName = "UserSet1";
    if (1 == g_nMode)
    {
        //ch:读模式 |en:Read mode
        g_nRet = MV_CC_FileAccessRead(pUser, &stFileAccess);
        if (MV_OK != g_nRet)
        {
            printf("File Access Read fail! nRet [0x%x]\n", g_nRet);
        }
    }
    else if (2 == g_nMode)
    {
        //ch:写模式 |en:Write mode
        g_nRet = MV_CC_FileAccessWrite(pUser, &stFileAccess);
        if (MV_OK != g_nRet)
        {
            printf("File Access Write fail! nRet [0x%x]\n", g_nRet);
        }
    }

如果想要断电生效,还需要参考方法1,useset对参数进行保存
缺点:

  • bin文件不能被阅读与修改
  • .要求相机型号、固件版本号一致

MVS导入导出功能

方法4:MVS导入导出功能
MVS此功能的实现与FileAccess 功能一致,导出的都是userset参数
版本要求:MVS3.2.1版本及其以上
使用方法很简单,链接相机后,在属性界面的上方找到导入/导出的图标按钮,点击即可,生成.mfs后缀的文件即可
在这里插入图片描述

几种方法的优缺点比较

方法 优点 缺点
UserSetLoad (推荐使用) 操作简单、MVS、sdk都可以操作实现 批量机台复制操作不易
FeatureLoad/FeatureSave ini文件可读性高,批量机台复制简单、参数修改简单 需代码开发;MVS不兼容
FileAccess 批量复制简单,与MVS兼容 文件不可读,不可被修改;
MVS导入导出(推荐使用) 批量复制简单,SDK可兼容 文件不可读,不可被修改;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

海康工业相机功能模块-参数保存、加载、批量复制参数 的相关文章

  • 网上疯传的《阿里Java架构师成长之路》!,网友瞬间沸腾了

    工作1 5年开发经验 当你们提出涨工资的时候 或者要offer的时候底气怎么样 是不是底气十足 不给涨工资就辞职 是不是有自信提出来主管 或者是项目经理都能同意 他们相当设法把你留住 如果这样你才是成功 什么技术都没有何谈工资 给你分析一下
  • Algo_math、判断两圆包含

    给定一个圆A X Y 圆心 R为半径 圆B x y 圆心 r为半径 判断 圆B 是否在 圆A 的内部 上图 则不包含 等价于 绿线长度 lt R X x
  • Java面试题详解:什么是面向对象编程

    参考答案 一般我们可以围绕面向对象的几个特征去展开 封装 继承 抽象 多态 个人理解 面向对象编程有点类似于数学建模 一般用于解决一个复杂的问题 解决这个问题通常涉及到多个物理或抽象概念 并且它们之间会有各种关系及交互行为 面向对象编程其实
  • boost.asio服务器使用io_service作为work pool

    使用io service作为处理工作的work pool 可以看到 就是通过io service post投递一个Handler到io service的队列 Handler在这个io service run内部得到执行 有可能你会发现 io
  • linux下查看谁在用显卡

    一般查看显卡的使用情况使用的命令为 nvidia smi 但是这个只能输出显卡的占用及进程 看不到谁在用 信息如下 但是可以借助上面的PID信息 查看对应的进程是谁调用的 命令为 ps f p 4417 其中4417就是上图中的其中一个PI
  • 激活函数---Sigmoid、Tanh、ReLu、softplus、softmax

    激活函数 就是在神经网络的神经元上运行的函数 负责将神经元的输入映射到输出端 常见的激活函数包括 Sigmoid TanHyperbolic tanh ReLu softplus softmax 这些函数有一个共同的特点那就是他们都是非线性
  • 数据结构:树的概念和结构

    文章目录 1 树的概念 2 树的结构 3 树的相关概念 4 树的表示 孩子表示法 双亲表示法 孩子兄弟表示法 5 树在实际中的应用 1 树的概念 树是一种非线性的数据结构 它是由 n n gt 0 个有限结点组成一个具有层次关系的 把它叫做
  • TCP —— TCP连接的建立与释放

    一 TCP连接管理 在TCP连接建立的过程中 要解决以下三个问题 要使每一方都能够确知对方的存在 要允许双方协商一些参数 如最大窗口值 是否使用窗口扩大选项 时间戳选项及服务质量等 能够对运输实体资源 如缓存大小 连接表中的项目等 进行分配
  • echarts 暂无数据的完美解决办法

    前景 很简单的一个思想 我希望没有数据的时候 不显示图表 并且用empty来替换 但是直接使用v if 会出错 因为调用的时候 拿不到dom了 v if直接把dom干掉了 怎么办呢 直接上步骤 1 第一步 我们应该在每次点击按钮的时候 发送
  • EM算法及其推广---《统计学习方法》第9章

    EM算法是一种迭代算法 用于含有隐变量的概率模型参数的极大似然估计 或极大后验概率估计 EM算法的每次迭代由两步组成 E步求期望值 M步求最大值 EM算法是一种对模型参数的估计 该模型中含有隐变量 EM算法的引入 EM算法 概率模型有时既含
  • 即时通讯(IM)开源项目OpenIM每周迭代版本发布-音视频实时通话-v2.0.4

    介绍 OpenIM每周五发布新版 包括新特性发布 bug修复 同时合并PR 由于2 0版本重构完毕 架构更清晰 代码更规范 先邀请各位参与OpenIM社区建设 包括技术开发 技术分享等 特性开发 性能优化 bug修复等 有兴趣的同学可以加我
  • 使用burpsuite抓不到127.0.0.1本地包(针对Firefox浏览器)

    解决方法一 首先第一步点击浏览器右上角按钮 点击设置 点击常规 设置 按照如图设置 设置完毕后基本能解决问题 如果不行还有第二种解决方式 解决方法二 浏览器地址栏种输入 about config 搜索框输入如下 把值改为true即可 net
  • Spring Cloud微服务-网关(2)

    微服务网关Zuul 为什么需要微服务网关 不同的微服务一般有不同的网络地址 而外部的客户端可能需要调用多个服务的接口才 能完成一个业务需求 比如一个电影购票的收集APP 可能回调用电影分类微服务 用户 微服务 支付微服务等 如果客户端直接和
  • 二叉树的创建、遍历、深度、叶子节点数

    回忆一下 呵呵 include
  • Qt 打开本地文件夹,限定文件类型的两种方式

    需要打开本地文件夹的情况还挺多 比如File下面的open new save等功能 下面介绍两种打开本地文件夹的方式 第一种 QFileDialog getOpenFileName 函数 函数定义如下 QString QFileDialog
  • 树搜索:深度优先和广度优先

    在Android开发中 有时候会遇到多层级列表的显示 如下图 可用RecyclerView实现 其数据源的数据结构是一种树状结构 如下图 现在有两种方法来遍历这种数据结构 深度优先搜索 其过程简要来说是对每一个可能的分支路径深入到不能再深入
  • 基于springboot+vue民宿管理系统+数据库(附源码,说明文档)

    文章目录 开发环境 后端 前端 数据库 系统架构 管理员 用户用例 主要功能 用户功能模块 管理员功能模块 商家用户功能模块 前台首页功能模块 今天为大家带来的是 基于springboot vue民宿管理系统 开发环境 后端 开发语言 Ja
  • 理解线性回归(一)——回归的思想

    理解线性回归 一 回归的思想 1 经典的线性回归 之前介绍的LR回归和SVM算法本质上都和回归有写关联 尤其是LR回归算法 回归的目的是预测数值型的目标值 其核心部分和我们中小学时候学习到的线性拟合是一样的 就是说 假如我们能够建立了回归背
  • 刷脸支付三大优势让人回归万物本源

    3D人脸识别技术已实现检测人脸是否为活体 杜绝图片或视频破解 其高精度 高效率 高安全性催生刷脸支付 刷脸门禁 刷脸乘车 刷脸登机等应用落地 在5G AI引爆的万物互联未来 人回归智能万物的中心 脸成为无缝连接所有生活场景的重要途径 近期大

随机推荐