知微傳感Dkam系列3D相機SDK例程篇:CSharp連接相機及保存數據

序言

寫在前面

  • 本人從事機器視覺細分的3D相機行業。編寫此系列文章主要目的有:
    • 1、便利他人應用相機,本系列文章包含公司所出售相機的SDK的使用例程及詳細注釋;
    • 2、促進行業發展及交流。
  • 知微傳感Dkam系列3D相機可以應用于定位分揀、焊接焊縫提取、逆向建模、檢測測量等領域

DKAM系列3D相機SDK C#例程及注釋

相機連接、數據采集及保存

  • 本例程基于WIN10+VisualStudio2022+DkamSDK_1.6.83,采用C#語言
  • SDK的配置方法,請參考官方提供的SDK說明書
  • 新建C#工程時選用.NET Framework框架(暫不支持.NET框架)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConnectSave_CSharp
{internal class Program{static void Main(string[] args){Console.WriteLine("Hello ZhiSENSOR");//**********************************************查詢、連接相機****************************************************int camer_num = 0;int camera_ret = -1;//發現局域網內的相機camer_num = DkamSDK_CSharp.DiscoverCamera();Console.WriteLine("局域網內共有" + camer_num + "臺3D相機");//顯示局域網內相機IPfor (int i = 0; i < camer_num; i++) {Console.WriteLine("局域網內相機的IP為:" + DkamSDK_CSharp.CameraIP(i));if (String.Compare(DkamSDK_CSharp.CameraIP(i), "192.168.40.91") == 0) { camera_ret = i;}}//連接相機SWIGTYPE_p_CAMERA_OBJECT camera = DkamSDK_CSharp.CreateCamera(camera_ret);int connect = DkamSDK_CSharp.CameraConnect(camera);//**********************************************查詢、連接相機****************************************************if (connect == 0){Console.WriteLine("相機連接成功!");//獲取當前紅外相機的寬和高SWIGTYPE_p_int width_gray = DkamSDK_CSharp.new_intArray(0);DkamSDK_CSharp.GetCameraWidth(camera, width_gray, 0);int width = DkamSDK_CSharp.intArray_getitem(width_gray, 0);SWIGTYPE_p_int height_gray = DkamSDK_CSharp.new_intArray(0);DkamSDK_CSharp.GetCameraHeight(camera, height_gray, 0);int height = DkamSDK_CSharp.intArray_getitem(height_gray, 0);Console.WriteLine("紅外圖寬度:" + width + "    紅外圖高度:" + height);//獲取當前RGB相機的寬和高SWIGTYPE_p_int width_rgb = DkamSDK_CSharp.new_intArray(0);DkamSDK_CSharp.GetCameraWidth(camera, width_rgb, 1);int widthRGB = DkamSDK_CSharp.intArray_getitem(width_rgb, 0);SWIGTYPE_p_int height_rgb = DkamSDK_CSharp.new_intArray(0);DkamSDK_CSharp.GetCameraHeight(camera, height_rgb, 1);int heightRGB = DkamSDK_CSharp.intArray_getitem(height_rgb, 0);Console.WriteLine("RGB 圖寬度:" + widthRGB + "    RGB 圖高度:" + heightRGB);//定義紅外數據大小PhotoInfoCSharp gray_data = new PhotoInfoCSharp();int graysize = width * height;byte[] gray_pixel = new byte[graysize];//定義點云大小PhotoInfoCSharp PointCloud_data = new PhotoInfoCSharp();int pointsize = width * height * 6;byte[] point_pixel = new byte[pointsize];//定義RGB大小PhotoInfoCSharp RGB_data = new PhotoInfoCSharp();int RGBsize = widthRGB * heightRGB * 3;byte[] RGB_pixel = new byte[RGBsize];//**********************************************打開數據通道****************************************************//開啟數據流通道(0:紅外 1:點云 2:RGB)//紅外int streamgray = DkamSDK_CSharp.StreamOn(camera, 0);if (streamgray == 0){Console.WriteLine("紅外圖通道打開成功!");}else{Console.WriteLine( "紅外圖通道打開失敗!!!     錯誤碼:" + streamgray);}//點云int streampoint = DkamSDK_CSharp.StreamOn(camera, 1);if (streampoint == 0){Console.WriteLine("點云通道打開成功!");}else{Console.WriteLine("點云通道打開失敗!!!     錯誤碼:" + streampoint);}int streamRGB = DkamSDK_CSharp.StreamOn(camera, 2);if (streamRGB == 0){Console.WriteLine("RGB 圖通道打開成功!");}else{Console.WriteLine("RGB 圖通道打開失敗!!!     錯誤碼:" + streamRGB);}//開始接受數據int start = DkamSDK_CSharp.AcquisitionStart(camera);if (start == 0){Console.WriteLine("可以開始接收數據!");}else{Console.WriteLine("不能接收數據!!!     錯誤碼:" + start);}//刷新緩沖區DkamSDK_CSharp.FlushBuffer(camera, 0);DkamSDK_CSharp.FlushBuffer(camera, 1);DkamSDK_CSharp.FlushBuffer(camera, 2);Console.WriteLine("等待數據采集、傳輸。。。");//**********************************************等待相機上傳數據***************************************//獲取紅外數據int capturegray = DkamSDK_CSharp.TimeoutCaptureCSharp(camera, 0, gray_data, gray_pixel, graysize,10000000);if (capturegray == 0){Console.WriteLine("紅外數據接收成功!");}else{Console.WriteLine("紅外數據接收失敗!!!     錯誤碼:" + capturegray);}//獲取點云數據int capturepoint = DkamSDK_CSharp.TimeoutCaptureCSharp(camera, 1, PointCloud_data, point_pixel, pointsize, 10000000);if (capturepoint == 0){Console.WriteLine("點云數據接收成功!");}else{Console.WriteLine("點云數據接收失敗!!!     錯誤碼:" + capturepoint);}//獲取RGB數據int capturergb = DkamSDK_CSharp.TimeoutCaptureCSharp(camera, 2, RGB_data, RGB_pixel, RGBsize,10000000);if (capturergb == 0){Console.WriteLine("RGB數據接收成功!");}else{Console.WriteLine("RGB數據接收失敗!!!     錯誤碼:" + capturergb);}//保存紅外數據int savegray = DkamSDK_CSharp.SaveToBMPCSharp(camera, gray_data, gray_pixel, graysize, "gray.bmp");if (savegray == 0){Console.WriteLine("紅外數據保存成功!");}else{Console.WriteLine("紅外數據保存失敗敗!!!     錯誤碼:" + savegray);}//保存點云數據int savepoint = DkamSDK_CSharp.SavePointCloudToPcdCSharp(camera, PointCloud_data, point_pixel, pointsize, "pointcloud.pcd");if (savepoint == 0){Console.WriteLine("點云數據保存成功!");}else{Console.WriteLine("點云數據保存失敗!!!     錯誤碼:" + savepoint);}//保存RGB數據int saveRGB = DkamSDK_CSharp.SaveToBMPCSharp(camera, RGB_data, RGB_pixel, RGBsize, "rgb.bmp");if (saveRGB == 0){Console.WriteLine("RGB數據保存成功!");}else{Console.WriteLine("RGB數據保存失敗!!!     錯誤碼:" + saveRGB);}//**********************************************結束工作***************************************//釋放內存Array.Clear(point_pixel, 0, point_pixel.Length);Array.Clear(gray_pixel,  0, gray_pixel.Length);Array.Clear(RGB_pixel,   0, RGB_pixel.Length);//關閉數據流DkamSDK_CSharp.AcquisitionStop(camera);int streamoff = DkamSDK_CSharp.StreamOff(camera, 0);int streamoffpoint = DkamSDK_CSharp.StreamOff(camera, 1);int streamoffRGB = DkamSDK_CSharp.StreamOff(camera, 2);//斷開相機連接int disconnect = DkamSDK_CSharp.CameraDisconnect(camera);if (disconnect == 0){Console.WriteLine("成功斷開相機!");}else{Console.WriteLine("斷開相機失敗!!!     錯誤碼:" + disconnect);}//銷毀相機參數DkamSDK_CSharp.DestroyCamera(camera);}else{Console.WriteLine("相機連接失敗,失敗代碼:" + connect);}}}
}
  • 以上代碼應用D330XS型號相機測試成功

小結

  • 使用SDK或DkamView直接保存的灰度圖(紅外圖)和RGB圖是沒有經過畸變校正的,若需要,用戶可獲取相機各鏡頭的內參進行校正,獲取內、外參的例程可在本專欄的其他文章中獲取

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/100413.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/100413.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/100413.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[筆記] 系統分析師 第十二章 軟件架構設計(分析師主要工作)

文章目錄前言12.1 軟件架構概述12.1.1 軟件架構的意義12.1.2 軟件架構的發展史12.2 軟件架構建模12.3 軟件架構風格12.3.1 軟件架構風格概述12.3.2 數據流體系結構風格1.批處理體系結構風格2.管道-過濾體系結構風格12.3.3 調用/返回體系結構風格1.主程序/子程序風格2.面向對象體…

C++---存儲周期,作用域,鏈接性

在C程序設計中&#xff0c;變量的行為不僅由其類型決定&#xff0c;還由存儲周期&#xff08;變量在內存中存在的時間&#xff09;、作用域&#xff08;變量可被訪問的代碼范圍&#xff09;和鏈接性&#xff08;變量在多文件程序中的可見性&#xff09;共同約束。 一、存儲周期…

基于Python的商品爬取與可視化系統

本系統是基于Python的商品數據爬取與價格分析可視化系統&#xff0c;集成了數據爬取、數據存儲、數據展示和可視化分析等功能。下面介紹一下系統主要功能和技術棧。一、主要功能&#xff1a;1、數據爬取功能 支持淘寶美妝商品數據爬取 可配置搜索關鍵詞和爬取頁數 實時顯示爬取…

聯邦學習過程中,了解清楚影響準確率的因素有哪些也很重要

影響模型準確率的因素有很多&#xff0c;下面是一些主要的因素&#xff0c;它們可以從數據、模型設計、訓練策略以及超參數等多個層面來考慮。1. 學習率作用&#xff1a;學習率直接影響模型的訓練速度、穩定性和最終表現。過高的學習率可能導致模型不收斂或收斂不穩定&#xff…

C# WPF中使用System.Management.Automation類調用Powershell報錯解決辦法

在WPF開發中&#xff0c;需要使用powershell進行自動化管理&#xff0c;以下為開發環境 1、.NET framework 4.7.2 2、VS2019 社區版 使用System.Management.Automation類 遇到的問題&#xff1a; 需要引用 System.Management.Automation類&#xff0c;但是在使用using指令時無法…

從 Pump.fun「直播」看熱點幣的生與死

在加密市場里&#xff0c;熱點就是流量&#xff0c;流量就是價值。最近&#xff0c;Solana 生態的 Pump.fun 推出了「直播」板塊&#xff0c;讓發幣這件事變得像看秀一樣&#xff1a;一個個新幣在鏈上實時登場&#xff0c;社區即時互動&#xff0c;玩家實時下注。這種形式不僅帶…

圖靈完備性:計算理論的基石與無限可能

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 1 圖靈完備性的基本概念 圖靈完備性&#xff08;Turing completeness…

HarmonyOS 5.0應用開發——V2裝飾器@once的使用

【高心星出品】 文章目錄V2裝飾器once的使用概念一、核心作用與規則二、適用場景案例V2裝飾器once的使用 概念 在鴻蒙ArkTS開發中&#xff0c;Once裝飾器用于實現子組件僅接受父組件傳遞的初始值&#xff0c;后續父組件數據變化不再同步至子組件。以下是其核心要點&#xff1…

跨域請求:解決方案

一、跨域核心概念&#xff1a;同源策略與跨域定義 跨域問題的根源是瀏覽器的 同源策略&#xff08;Same-Origin Policy&#xff09;&#xff0c;這是瀏覽器為保護用戶數據安全而設置的核心安全限制。 1. 什么是 “同源”&#xff1f; “同源” 指的是兩個 URL 的 協議、域名…

前端形態與樣式風格:從古典到現代的視覺語言演進

目錄前端形態與樣式風格&#xff1a;從古典到現代的視覺語言演進概述1. 前端形態的演進&#xff1a;四種核心范式1.1 古典范式&#xff1a;語義化HTML與CSS1.2 組件化范式&#xff1a;模塊化與復用1.3 響應式范式&#xff1a;多端適配1.4 動態范式&#xff1a;狀態驅動視圖2. 樣…

用戶系統從0到1:登錄、權限、積分一網打盡

&#x1f464; 用戶系統從0到1&#xff1a;登錄、權限、積分一網打盡 副標題&#xff1a;Flask-Login 多級權限 積分會員系統實戰 項目原型&#xff1a;https://madechango.com 難度等級&#xff1a;???☆☆ 預計閱讀時間&#xff1a;20分鐘 &#x1f3af; 引子&#xff1…

Java 大視界 -- Java 大數據在智能安防視頻監控系統中的視頻內容理解與智能預警升級

Java 大視界 -- Java 大數據在智能安防視頻監控系統中的視頻內容理解與智能預警升級引言&#xff1a;正文&#xff1a;一、傳統安防監控的 “三重困局”&#xff1a;看不全、看不懂、反應慢1.1 人工盯屏 “力不從心”1.1.1 攝像頭密度與人力的矛盾1.1.2 錄像調閱 “馬后炮”1.2…

OpenHarmony包管理子系統核心源碼深度解讀:從BundleManager到AMS,徹底打通應用安裝、卸載與沙箱機制全鏈路

目錄 架構概覽 核心組件詳解 包安裝流程分析 包卸載流程分析 包更新流程分析 包信息存儲機制 Launcher界面管控 開機默認系統應用安裝機制<

簡單聊聊神經網絡中的反向傳播

參考文章&#xff1a; 一文弄懂神經網絡中的反向傳播法——BackPropagation - Charlotte77 - 博客園 反向傳播求偏導原理簡單理解_反向傳播偏導-CSDN博客 這篇文章是筆者在讀完上述兩篇參考文章后的整理或者說按照自己的理解進行的一些補充&#xff0c;強烈推薦先閱讀上述兩篇文…

JSP自駕游管理系統46u2v--(程序+源碼+數據庫+調試部署+開發環境)

本系統&#xff08;程序源碼數據庫調試部署開發環境&#xff09;帶論文文檔1萬字以上&#xff0c;文末可獲取&#xff0c;系統界面在最后面。系統程序文件列表開題報告內容一、研究背景與意義 近年來&#xff0c;自駕游因自由度高、個性化強成為國內旅游市場增長最快的領域&…

通過 SQL 快速使用 OceanBase 向量檢索學習筆記

背景 AI時代離不開向量數據庫&#xff0c;向量數據庫簡單說就是在數據庫中用多維向量存儲某類事物的特征&#xff0c;通過公式計算各個向量在空間坐標系中的位置關系&#xff0c;以此來判斷事物之間的相似性。相關基礎概念如下: ● Embedding ● 距離/相似性度量 ○ Cosine dis…

PromptAD:首次引入提示學習,實現精準工業異常檢測,1張正常樣本即可超越現有方法

近年來&#xff0c;工業異常檢測&#xff08;Anomaly Detection&#xff09;在智能制造、質量監控等領域扮演著越來越重要的角色。傳統方法通常依賴大量正常樣本進行訓練&#xff0c;而在實際生產中&#xff0c;異常樣本稀少甚至不存在&#xff0c;能否僅憑少量正常樣本就實現精…

算法 --- 字符串

字符串 字符串算法題目主要處理文本的查找、匹配、比較、變換和統計問題&#xff0c;其核心特點是輸入數據為字符序列&#xff0c;解題關鍵在于利用其連續性、前綴性、字典序等特性&#xff0c;并常借助哈希、自動機、指針滑動、動態規劃等技巧高效處理。 詳細分類型與適用場景…

SpringBoot中 Gzip 壓縮的兩種開啟方式:GeoJSON 瘦身實戰

目錄 前言 一、GZIP壓縮知識簡介 1、什么是Gzip 2、Gzip特點 3、Gzip在GIS方面的應用 二、SpringBoot中開啟Gzip的方式 1、在SpringBoot中開啟Gzip的知識簡介 2、SpringBoot中GeoJSON的實例 三、全局開啟Gzip實現 1、實現原理 2、實現效果 四、局部約定配置 1、實現…

PPTist+cpolar:開源演示文稿的遠程創作方案

文章目錄前言【視頻教程】1. 本地安裝PPTist2. PPTist 使用介紹3. 安裝Cpolar內網穿透4. 配置公網地址6. 配置固定公網地址前言 PPTist作為開源在線演示文稿工具&#xff0c;提供媲美PowerPoint的核心功能&#xff0c;支持多頁面編輯、圖表插入、音視頻嵌入和動畫效果設置。特…