日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/1/1 编程问答 198 豆豆
生活随笔 收集整理的這篇文章主要介紹了 海康工业相机功能模块-参数保存、加载、批量复制参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??倒I相機功能模塊-參數保存與加載

  • 前言
    • 相機參數保存的快速方法
    • 相機參數導入導出的操作方法
      • UserSetLoad 加載相機內部參數
      • FeatureLoad/FeatureSave
      • FileAccess 功能
      • MVS導入導出功能
    • 幾種方法的優缺點比較

前言

前面一篇文章,講了工業相機參數如何設置與獲取,使用sdk能夠將自己想要的參數快速的配置進自己的程序,但是,在實際使用中,我們會發現,sdk配置的參數似乎在斷電只會就消失啦,不能實現斷電生效???
軟件開發過程中,只能夠配置常見的參數,一些偏門的參數,非常見的相機調試參數,如何批量設置進相機、如果斷電能夠保存???
這一篇文章就是來介紹、解決這個問題

相機參數保存的快速方法

  • MVS如何操作

參考相機用戶手冊提供的方法,主要操作分為3步

  • 修改參數后,通過User Set Selector 參數下拉選擇其中一套User Set 參數,例如選擇"User Set 1"(你的參數保存在哪里)
  • 通過User Set default參數下拉選擇其中一套User Set 參數,例如選擇"User Set 1"(相機重新上電后,加載那套參數)
  • 點擊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: 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

  • 方法2:FeatureLoad/FeatureSave
    參考MVS提供的示例程序:C:\Program Files (x86)\MVS\Development\Samples\VC\VS\SimpleSamples\ParametrizeCamera_LoadAndSave
    關鍵代碼:
  • // ch:打開設備 | en:Open devicenRet = 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 filenRet = 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 filenRet = 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 devicenRet = 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的參數無法導出,這個屬性取決于相機,相機支持就能導出;目前根據觀察,??荡蟛糠窒鄼C的常見參數,都是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 modeg_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 modeg_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/FeatureSaveini文件可讀性高,批量機臺復制簡單、參數修改簡單需代碼開發;MVS不兼容
    FileAccess批量復制簡單,與MVS兼容文件不可讀,不可被修改;
    MVS導入導出(推薦使用)批量復制簡單,SDK可兼容文件不可讀,不可被修改;

    總結

    以上是生活随笔為你收集整理的海康工业相机功能模块-参数保存、加载、批量复制参数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。