使用C#、控制台程序操作,D455型号的摄像头。
-
创建新的控制台项目,项目名称:RealSenceCameraD455_Test01,框架选择.net6.0。
-
Nuget搜索并安装:Intel.RealSenceWithNativeDll,此SDK是Intel的2代库。
-
搭建项目
using Intel.RealSense; using System.Diagnostics; namespace RealSenseCameraD455_Test01 { internal class Program { static void Main(string[] args) { // RealSence上下文实例 using var ctx = new Context(); // 通过上下文,寻找本机中的RealSence摄像头 var list = ctx.QueryDevices(); if (list.Count <= 0) { Debug.WriteLine("相机设备数量为0!"); } // 获取第一个摄像头实例 Device camera = list[0]; // 打印摄像头名称 Console.WriteLine("摄像头名称:{0}", camera.Info[CameraInfo.Name]); // 打印摄像头序列号 Console.WriteLine("摄像头序列号:{0}", camera.Info[CameraInfo.SerialNumber]); // 打印摄像头固件版本号 Console.WriteLine("摄像头固件版本:{0}", camera.Info[CameraInfo.FirmwareVersion]); // 打印摄像头生产序列号 // Device实例中的Info属性中还有其他一些摄像头的信息 Console.WriteLine("摄像头生产序号:{0}", camera.Info[CameraInfo.ProductId]); // 用于配置摄像头(使用摄像头中的哪些功能) using var config = new Config(); // 初始化流(此处初始化深度流,用于显示深度图像及被测物体的距离值) config.EnableStream(Intel.RealSense.Stream.Depth, 640, 480, Format.Z16, 30); // 创建管道实例,管道对象用于连接电脑与摄像头,数据通过管道输送至电脑 using var pipeLine = new Pipeline(ctx); pipeLine.Start(config); while (true) { // 电脑端从管道等待获取所有的帧数据 using var frames = pipeLine.WaitForFrames(1000); // 获取深度帧 using var deepFrame = frames.DepthFrame; if(deepFrame != null) { ushort[] depthData = new ushort[deepFrame.Width * deepFrame.Height]; deepFrame.CopyTo(depthData); // 获取中心像素的深度值 int centerX = deepFrame.Width / 2; int centerY = deepFrame.Height / 2; int centerIndex = centerY * deepFrame.Width + centerX; ushort depthValue = depthData[centerIndex]; // 在控制台中打印摄像头检测到目标物体的距离值 Console.WriteLine($"中心像素的深度值:{depthValue} 毫米"); } Thread.Sleep(100); } } } }
-
创建Context上下文实例,通过上下文查找目标摄像头
-
创建Config实例,达成使用此摄像头的目的。可以选择不同的模式(目的,或者组合使用)
-
Stream.Depth 深度模式
-
Stream.Color 彩色模式
-
Stream.Infrared 红外线模式
-
Stream.Accel 加速模式 accelerometer motion
-
Stream.Fisheye 鱼眼模式
-
Stream.Gyro 陀螺仪模式 gyroscope
-
Stream.Gpio 通过Gpio接口连接获取数据的模式
-
Stream.Pose Stream.Confidence 六个自由度的姿势数据
-
-
创建Pipeline管道实例,通过管道,使得摄像头与电脑建立联系,简化操作流程
-