序言

写在前面

  • 本人从事机器视觉细分的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;支持多页面编辑、图表插入、音视频嵌入和动画效果设置。特…