pyrealsense2获取保存点云

一、第一种实现代码

Python

import sys
import cv2
import pyrealsense2 as rs
import numpy as np
import keyboard
import open3d as o3d
import osif __name__ == "__main__":output_folder = 'output_data/'os.makedirs(output_folder, exist_ok=True)pipeline = rs.pipeline()config = rs.config()config.enable_stream(rs.stream.depth, 848, 480, rs.format.z16, 30)config.enable_stream(rs.stream.color, 848, 480, rs.format.bgr8, 30)# Start streamingpipeline.start(config)# 深度图像向彩色对齐align_to_color = rs.align(rs.stream.color)i = 0try:while True:pc = rs.pointcloud()# Wait for a coherent pair of frames: depth and colorframes = pipeline.wait_for_frames()frames = align_to_color.process(frames)depth_frame = frames.get_depth_frame()color_frame = frames.get_color_frame()if not depth_frame or not color_frame:print("wrong!")cv2.imshow("color_image", np.asanyarray(color_frame.get_data()))cv2.waitKey(1)if keyboard.is_pressed("a"):pc.map_to(color_frame)points = pc.calculate(depth_frame)vtx = np.asanyarray(points.get_vertices())npy_vtx = np.array(vtx).view(np.float32).reshape(-1, 3)tex_coords = np.asanyarray(points.get_texture_coordinates())tex_coords = np.array(tex_coords).view(np.float32).reshape(-1, 2)color_image = np.asanyarray(color_frame.get_data())u_pixel_indices = (tex_coords[:, 0] * (color_image.shape[1] - 1)).astype(int)v_pixel_indices = (tex_coords[:, 1] * (color_image.shape[0] - 1)).astype(int)u_pixel_indices = np.clip(u_pixel_indices, 0, color_image.shape[1] - 1)v_pixel_indices = np.clip(v_pixel_indices, 0, color_image.shape[0] - 1)colors = color_image[v_pixel_indices, u_pixel_indices, :]colors = colors[:, [2, 1, 0]] / 255.0print("points", type(points), points)print("npy_vtx", npy_vtx.shape, npy_vtx)pcd = o3d.geometry.PointCloud()pcd.points = o3d.utility.Vector3dVector(npy_vtx)pcd.colors = o3d.utility.Vector3dVector(colors)# 显示点云o3d.io.write_point_cloud(output_folder + str(i) + ".ply",pcd)i += 1if keyboard.is_pressed("q"):sys.exit()finally:# Stop streamingpipeline.stop()

代码解析:

这段代码是使用Python和Intel RealSense SDK (pyrealsense2) 来捕捉深度相机的数据,并将深度数据与彩色数据结合,形成彩色的点云,然后将点云保存为PLY文件。同时,这里也使用了OpenCV来显示彩色图像和Open3D来处理和保存点云。

代码的执行流程如下:

  1. 首先,设置输出文件夹,如果不存在则创建。

  2. 初始化RealSense流水线(pipeline)和配置(config),分别启用深度和彩色流。

  3. 启动流水线开始捕获数据。

  4. 创建一个rs.align对象,以便将深度帧对齐到彩色帧。

  5. 进入一个无限循环中,不断地从流水线获取帧(即图像数据)。

  6. 使用align_to_color.process(frames)处理帧,使深度帧与彩色帧对齐。

  7. 提取深度帧和彩色帧,如果没有获取到这些帧,打印错误信息。

  8. 使用OpenCV显示彩色图像。

  9. 检查用户是否按下了“A”键。如果按下了,执行以下操作:

    • 使用pc.map_to(color_frame)映射颜色到点云。

    • 使用pc.calculate(depth_frame)计算点云。

    • 将点云的顶点(vtx)转换为NumPy数组,并重塑为三维数据。

    • 获取纹理坐标,重塑并转换为像素索引。

    • 使用像素索引从彩色图像中检索每个点的颜色。

    • 颜色数组的通道顺序可能需要从BGR转换为RGB,并归一化到[0, 1]范围。

    • 创建一个Open3D点云对象,并设置其顶点和颜色。

    • 将点云保存为PLY文件,文件名包含一个递增的编号。

  10. 如果程序被中断(可能是通过Ctrl+C或其他方式),则会执行finally块,停止流水线。

此代码还包含了一些关键函数和方法:

  • pipeline.wait_for_frames():从流水线等待并获取一组一致的帧。

  • pipeline.stop():停止流水线。

  • cv2.imshow("color_image", image):用于显示图片的OpenCV函数。

  • cv2.waitKey(1):用于OpenCV图像显示的键盘事件监听。

  • o3d.geometry.PointCloud():创建一个空的Open3D点云对象。

  • o3d.io.write_point_cloud():用于保存点云到文件的Open3D函数。

  • keyboard.is_pressed("a")和keyboard.is_pressed("q"):检查是否按下了特定的按键。

结果:

本人用的是一个放在白纸上的小方块,用cloudcompare软件查看点云

二、第一种实现代码 

Python

import sys
import cv2
import pyrealsense2 as rs
import numpy as np
import keyboard
import open3d as o3d
import osif __name__ == "__main__":output_folder = 'output_data/'os.makedirs(output_folder, exist_ok=True)pipeline = rs.pipeline()config = rs.config()config.enable_stream(rs.stream.depth, 848, 480, rs.format.z16, 30)config.enable_stream(rs.stream.color, 848, 480, rs.format.bgr8, 30)i = 0pipeline.start(config)align_to_color = rs.align(rs.stream.color)try:while True:# Wait for a coherent pair of frames: depth and colorframes = pipeline.wait_for_frames()frames = align_to_color.process(frames)depth_frame = frames.get_depth_frame()color_frame = frames.get_color_frame()depth_intrinsics = depth_frame.profile.as_video_stream_profile().intrinsicsprofile = frames.get_profile()if not depth_frame or not color_frame:continue# Convert images to numpy arraysdepth_image = np.asanyarray(depth_frame.get_data())color_image = np.asanyarray(color_frame.get_data())cv2.imshow("color_image", color_image)cv2.waitKey(1)color_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2RGB)depth_image = cv2.cvtColor(depth_image, cv2.COLOR_BGR2RGB)if keyboard.is_pressed("a"):print("type of depth_image:", type(depth_image))print("shape of depth_image:", depth_image.shape)o3d_color = o3d.geometry.Image(color_image)o3d_depth = o3d.geometry.Image(depth_image)rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(o3d_color, o3d_depth,depth_scale=1000.0,depth_trunc=3.0,convert_rgb_to_intensity=False)intrinsics = profile.as_video_stream_profile().get_intrinsics()# 转换为open3d中的相机参数pinhole_camera_intrinsic = o3d.camera.PinholeCameraIntrinsic(intrinsics.width, intrinsics.height,intrinsics.fx, intrinsics.fy,intrinsics.ppx, intrinsics.ppy)o3d_result = o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_image,pinhole_camera_intrinsic)o3d.io.write_point_cloud(output_folder + str(i) + ".ply",o3d_result)i += 1if keyboard.is_pressed("q"):sys.exit()finally:pipeline.stop()

代码解析:

这段代码使用Intel RealSense SDK (pyrealsense2) 与 Open3D 库结合来捕获深度和彩色图像数据,并生成彩色点云,最后将点云保存为PLY文件格式。同时,该代码也使用了OpenCV来显示彩色图像,并使用keyboard库来监听键盘事件。下面是对代码的详细解析:

  1. output_folder = 'output_data/':定义输出文件夹的路径。

  2. os.makedirs(output_folder, exist_ok=True):创建输出文件夹,如果该文件夹已经存在,则不会引发错误。

  3. 创建一个RealSense流水线(pipeline)和配置(config)对象,配置深度流和彩色流。

  4. 使用配置启动流水线(pipeline.start(config))。

  5. 定义一个rs.align对象align_to_color,以便将深度数据对齐到彩色数据。

  6. 进入一个无限循环,等待获取一对深度和彩色帧。

  7. 使用align_to_color.process(frames)将获取的帧对齐,以确保深度和彩色图像匹配。

  8. 转换深度帧和彩色帧到NumPy数组,并使用OpenCV显示彩色图像。

  9. 将彩色图像从BGR格式转换为RGB格式,因为Open3D使用的是RGB格式。

  10. 如果用户按下了“A”键,则执行以下步骤:

    • 打印深度图像的类型和形状。

    • 将NumPy中的图像数组转换为Open3D图像对象。

    • 使用Open3D创建RGBD图像对象。

    • 从帧的配置文件中获取相机内参。

    • 将相机内参转换成Open3D格式。

    • 使用RGBD图像和相机内参生成Open3D点云。

    • 将点云保存为PLY格式的文件。

  11. 如果用户按下了“Q”键,则退出程序。

  12. 如果程序被中断,无论是正常退出还是异常终止,finally块确保流水线被停止,释放相关资源。

代码中的depth_scaledepth_trunc参数在创建RGBD图像时使用,分别用于定义深度图像的单位转换(毫米到米)和深度截断阈值(超过此值的深度将被忽略)。convert_rgb_to_intensity参数设置为False,意味着在生成RGBD图像时不需要将彩色图像转换为灰度图像的强度值。

结果:

三、提取感兴趣区域点云的第一种实现代码 

Python

import sys
import cv2
import pyrealsense2 as rs
import numpy as np
import keyboard
import open3d as o3d
import osif __name__ == "__main__":output_folder = 'output_data/'os.makedirs(output_folder, exist_ok=True)width = 848height = 480pipeline = rs.pipeline()config = rs.config()config.enable_stream(rs.stream.depth, width, height, rs.format.z16, 30)config.enable_stream(rs.stream.color, width, height, rs.format.bgr8, 30)pipeline.start(config)align_to_color = rs.align(rs.stream.color)i = 0try:while True:pc = rs.pointcloud()frames = pipeline.wait_for_frames()frames = align_to_color.process(frames)depth_frame = frames.get_depth_frame()color_frame = frames.get_color_frame()if not depth_frame or not color_frame:continuecv2.imshow("color_image", np.asanyarray(color_frame.get_data()))cv2.waitKey(1)if keyboard.is_pressed("a"):pc.map_to(color_frame)points = pc.calculate(depth_frame)# 获取点云的顶点vtx = np.asarray(points.get_vertices())# 获取点云的纹理坐标tex_coords = np.asarray(points.get_texture_coordinates())# 获取彩色图像的数据,用于提取颜色color_image = np.asanyarray(color_frame.get_data())# (定义ROI边界 (x_min, y_min, x_max, y_max))x_min, y_min, x_max, y_max = 100, 100, 540, 380# 过滤ROI内的点和纹理坐标roi_vtx = []roi_tex_coords = []for y in range(y_min, y_max):for x in range(x_min, x_max):index = y * width + xif vtx[index][2]:  # 如果深度值非零roi_vtx.append(vtx[index])roi_tex_coords.append(tex_coords[index])roi_vtx = np.array(roi_vtx).view(np.float32).reshape(-1, 3)roi_tex_coords = np.array(roi_tex_coords).view(np.float32).reshape(-1, 2)# 转换纹理坐标为像素坐标u_pixel_indices = (roi_tex_coords[:, 0] * (color_image.shape[1] - 1)).astype(int)v_pixel_indices = (roi_tex_coords[:, 1] * (color_image.shape[0] - 1)).astype(int)# 获取点云颜色roi_colors = color_image[v_pixel_indices, u_pixel_indices, :]# 创建Open3D点云pcd = o3d.geometry.PointCloud()pcd.points = o3d.utility.Vector3dVector(roi_vtx)pcd.colors = o3d.utility.Vector3dVector(roi_colors[:, [2, 1, 0]] / 255.0)  # 归一化颜色值# 保存点云o3d.io.write_point_cloud(output_folder + str(i) + ".ply", pcd)i += 1if keyboard.is_pressed("q"):sys.exit()finally:pipeline.stop()

代码解析:

x_min, y_min, x_max, y_max = 100, 100, 540, 380
# 过滤ROI内的点和纹理坐标
roi_vtx = []
roi_tex_coords = []
for y in range(y_min, y_max):
for x in range(x_min, x_max):
index = y * width + x
if vtx[index][2]:  # 如果深度值非零
roi_vtx.append(vtx[index])
roi_tex_coords.append(tex_coords[index])
  1. x_min, y_min, x_max, y_max = 100, 100, 540, 380:这一行定义了ROI的边界,在此示例中,ROI是矩形框,其左上角坐标为 (100, 100),右下角坐标为 (540, 380)

  2. width = 848 和 height = 480:这两行定义了深度图像的宽度和高度。在此示例中,深度图像的分辨率是 848x480。

  3. roi_vtx = [] 和 roi_tex_coords = []:这两行初始化两个空列表,用于存储ROI内的顶点(vtx)和纹理坐标(tex_coords)。

  4. 接下来的嵌套循环遍历定义的ROI中的每个像素坐标 (x, y)

    • for y in range(y_min, y_max): 遍历ROI垂直方向上的每一行。

    • for x in range(x_min, x_max): 遍历ROI水平方向上的每一列。

  5. index = y * width + x:这一行计算当前 (x, y) 坐标在深度图像一维数组中的索引。深度图像的数据以一维数组形式存储,计算索引时需要将二维坐标 (x, y) 转换为一维索引。转换方法是:y 行乘以每行的像素数(width),然后加上当前行的列坐标 x

  6. if vtx[index][2]::这一行检查当前点的深度值是否非零(索引 [2] 表示 Z 轴,即深度)。如果深度值为零,表示该点没有有效的深度信息,因此不包含在ROI内的点云中。

  7. roi_vtx.append(vtx[index]) 和 roi_tex_coords.append(tex_coords[index]):如果当前点具有有效的深度信息,则将点的顶点和纹理坐标追加到 roi_vtx 和 roi_tex_coords 列表中。

结果:

四、提取感兴趣区域点云的第二种实现代码

Python

import sys
import cv2
import pyrealsense2 as rs
import numpy as np
import keyboard
import open3d as o3d
import osif __name__ == "__main__":output_folder = 'output_data3/'os.makedirs(output_folder, exist_ok=True)pipeline = rs.pipeline()config = rs.config()# 定义感兴趣区域(ROI)的边界x_min, y_min, x_max, y_max = 100, 100, 540, 380config.enable_stream(rs.stream.depth, 848, 480, rs.format.z16, 30)config.enable_stream(rs.stream.color, 848, 480, rs.format.bgr8, 30)i = 0pipeline.start(config)align_to_color = rs.align(rs.stream.color)try:while True:# Wait for a coherent pair of frames: depth and colorframes = pipeline.wait_for_frames()frames = align_to_color.process(frames)depth_frame = frames.get_depth_frame()color_frame = frames.get_color_frame()if not depth_frame or not color_frame:continue# Convert images to numpy arraysdepth_image = np.asanyarray(depth_frame.get_data())color_image = np.asanyarray(color_frame.get_data())# Defining ROI on color imagecolor_image_roi = color_image[y_min:y_max, x_min:x_max]# Defining ROI on depth imagedepth_image_roi = depth_image[y_min:y_max, x_min:x_max]cv2.imshow("color_image", color_image)cv2.imshow("color_image_roi", color_image_roi)  # 显示ROI的彩色图像cv2.waitKey(1)color_image = cv2.cvtColor(color_image_roi, cv2.COLOR_BGR2RGB)depth_image = cv2.cvtColor(depth_image_roi, cv2.COLOR_BGR2RGB)if keyboard.is_pressed("a"):o3d_color = o3d.geometry.Image(color_image)o3d_depth = o3d.geometry.Image(depth_image)rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(o3d_color,o3d_depth,depth_scale=1000.0,depth_trunc=3.0,convert_rgb_to_intensity=False)profile = frames.get_profile()intrinsics = profile.as_video_stream_profile().get_intrinsics()# 转换为open3d中的相机参数pinhole_camera_intrinsic = o3d.camera.PinholeCameraIntrinsic(intrinsics.width, intrinsics.height,intrinsics.fx, intrinsics.fy,intrinsics.ppx, intrinsics.ppy)o3d_result = o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_image,pinhole_camera_intrinsic)# Transform the point cloud to the original coordinate systemo3d_result.transform([[1, 0, 0, -x_min], [0, 1, 0, -y_min], [0, 0, 1, 0], [0, 0, 0, 1]])o3d.io.write_point_cloud(output_folder + str(i) + ".ply", o3d_result)i += 1if keyboard.is_pressed("q"):sys.exit()finally:pipeline.stop()

代码解析: 

color_image_roi = color_image[y_min:y_max, x_min:x_max]
depth_image_roi = depth_image[y_min:y_max, x_min:x_max]
color_image = cv2.cvtColor(color_image_roi, cv2.COLOR_BGR2RGB)
depth_image = cv2.cvtColor(depth_image_roi, cv2.COLOR_BGR2RGB)
o3d_result.transform([[1, 0, 0, -x_min], [0, 1, 0, -y_min], [0, 0, 1, 0], [0, 0, 0, 1]])
  1. color_image_roi = color_image[y_min:y_max, x_min:x_max]: 这行代码定义了彩色图像的一个区域兴趣(ROI),通过在原始彩色图像数组上使用数组切片功能。color_image 是一个NumPy数组,而 [y_min:y_max, x_min:x_max] 是一个切片操作,它从图像中提取从 y_min 到 y_max 行和从 x_min 到 x_max 列的像素。结果是一个新的图像数组,只包含原始彩色图像中指定矩形区域的像素。

  2. depth_image_roi = depth_image[y_min:y_max, x_min:x_max]: 这行代码与上面的类似,它定义了深度图像的一个ROI。这意味着只有深度图像中的指定区域将被用于后续处理。在捕获彩色图像的同时,同样的区域也从深度图像中取出,以确保彩色和深度图像的对应关系。

  3. color_image = cv2.cvtColor(color_image_roi, cv2.COLOR_BGR2RGB): 这行代码使用OpenCV库的 cvtColor 函数将ROI中的彩色图像从BGR颜色空间转换到RGB颜色空间。这通常是必要的,因为OpenCV默认使用BGR颜色顺序,而Open3D和其他许多图像处理库则预期图像为RGB颜色顺序。

  4. depth_image = cv2.cvtColor(depth_image_roi, cv2.COLOR_BGR2RGB): 这行代码似乎不正确,因为深度图像通常是单通道的(灰度图),它只包含深度信息而没有颜色。因此,深度图像不需要从BGR转换到RGB,而应该保留原始格式。这可能是一个编码错误,应该将该行代码删除或替换为正确处理单通道深度图像的代码。

  5. o3d_result.transform([[1, 0, 0, -x_min], [0, 1, 0, -y_min], [0, 0, 1, 0], [0, 0, 0, 1]]): 这行代码应用了一个4x4的仿射变换矩阵,以调整点云的坐标。在这个变换中,仅在x和y方向上应用了平移(-x_min 和 -y_min),目的是将点云对齐回其在原始图像中的相对位置。这是因为创建点云时仅使用了原始图像的一个小区域(ROI),而不是整个图像。

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三级数据库技术知识点(详解!!!)

1、从功能角度数据库应用系统可以划分为表示层、业务逻辑层、数据访问层、数据持久层四个层次,其中负责向表示层直接传送数据的是业务逻辑层。 【解析】表示层负责所有与用户交互的功能;业务逻辑层负责根据业务逻辑需要将表示层获取的数据进行组织后,传…

阅读MySQL知识4

一、MySQL数据库主从同步延迟产生的原因 MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高。 Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作…

SpringBoot如何替换启动图标

SpringBoot项目在启动时会出现一个默认的启动图案 . ____ _ __ _ _/\\ / ____ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | _ | _| | _ \/ _ | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) ) |____| .__|_| |_|_| |_\__, | / / / /|_||___//_/_/_/::…

软件架构和基于架构的软件开发方法知识总结

一、软件架构定义 软件架构为软件系统提供了一个结构、行为和属性的高级抽象 软件架构是一种表达,使软件工程师能够: (1)分析设计在满足所规定的需求方面的有效性 (2)在设计变更相对容易的阶段,…

题目:异或森林(蓝桥OJ 3400)

问题描述&#xff1a; 解题思路&#xff1a; 一个数也可以看作是一段区间&#xff0c;当该区间的异或和为完全平方数时则符合题意。 我们需要注意枚举的完全平方的上限。 异或前缀和减小时间复杂度。 题解&#xff1a; #include <bits/stdc.h> using namespace std; usi…

vi\vim编辑器详解

vi\vim编辑器介绍 vi\vim是visual interface的简称, 是Linux中最经典的文本编辑器 同图形化界面中的 文本编辑器一样&#xff0c;vi是命令行下对文本文件进行编辑的绝佳选择。 vim 是 vi 的加强版本&#xff0c;兼容 vi 的所有指令&#xff0c;不仅能编辑文本&#xff0c;而…

鸿蒙一次开发,多端部署(九)应用市场首页

本小节将以应用市场首页为例&#xff0c;介绍如何使用自适应布局能力和响应式布局能力适配不同尺寸窗口。 页面设计 一个典型的应用市场首页的UX设计如下所示。 观察应用市场首页的页面设计&#xff0c;不同断点下的页面设计有较多相似的地方。 据此&#xff0c;我们可以将页…

python的BBS论坛系统flask-django-nodejs-php

为了更好地发挥本系统的技术优势&#xff0c;根据BBS论坛系统的需求&#xff0c;本文尝试以B/S架构设计模式中的django/flask框架&#xff0c;python语言为基础&#xff0c;通过必要的编码处理、BBS论坛系统整体框架、功能服务多样化和有效性的高级经验和技术实现方法&#xff…

WebClient上载文件——实现将本地文件同步到远端服务器上

问题描述 用户上传产品示例图片到服务器端上&#xff0c;客户端在请求图片资源时&#xff0c;当服务端架设了多个节点的情况下&#xff0c;由于没有负载均衡请求到保存图片资源的服务器&#xff0c;出现图片访问404的问题。 这里保存上传文件时&#xff0c;同时需要将该文件保…

数学建模(层次分析法 python代码 案例)

目录 介绍&#xff1a; 模板&#xff1a; 例题&#xff1a;从景色、花费、饮食&#xff0c;男女比例四个方面去选取目的地 准则重要性矩阵&#xff1a; 每个准则的方案矩阵&#xff1a;​ 一致性检验&#xff1a; 特征值法求权值&#xff1a; 完整代码&#xff1a; 运行结…

1.6 学Python能干什么,Python的应用领域有哪些

Python能干什么&#xff0c;Python的应用领域 Python 作为一种功能强大的编程语言&#xff0c;因其简单易学而受到很多开发者的青睐。那么&#xff0c;Python 的应用领域有哪些呢&#xff1f; Python 有着非广泛的应用&#xff0c;几乎所有大中型互联网公司都在使用 Python&a…

基于甘特图的资源调度优化策略

资源在项目管理中是一个永恒的话题。无论人力、物力还是财力资源,总是捉襟见肘,都希望用最少的资源完成最大的工作。这就要求我们在资源调度方面果断精准,做到最优化。而甘特图作为项目时间规划的重要工具,恰恰能为资源调度提供绝佳帮助。 甘特图能反映出任务之间的制约关系,有…

Flutter 项目架构技术指南

Flutter 项目架构技术指南 视频 https://www.bilibili.com/video/BV1rx4y127kN/ 前言 原文 https://ducafecat.com/blog/flutter-clean-architecture-guide 探讨Flutter项目代码组织架构的关键方面和建议。了解设计原则SOLID、Clean Architecture&#xff0c;以及架构模式MVC…

(MATLAB)第二十一章 Simulink仿真设计初步

Simulink是MATLAB的重要组成部分&#xff0c;可以非常容易地实现可视化建模&#xff0c;并把理论研究和工程实践有机地结合在一起&#xff0c;不需要书写大量程序&#xff0c;只需要使用鼠标和键盘对已有模块进行简单的操作和设置。 21.1 Simulink简介 Simulink是MATLAB软件的…

linux热键,man手册介绍

目录 热键 tab ctrl c ctrl r man 区段 快捷键 热键 tab 可以看到以输入的内容为开头的指令,但无法选择: 当输入的内容匹配到的内容只有一个时,可以自动补全 可以用于输入路径时,自动补全文件名 ctrl c 让当前的程序停掉,可以在 程序或指令出问题而自己无法停止时 使用…

LeetCode---126双周赛

题目列表 3079. 求出加密整数的和 3080. 执行操作标记数组中的元素 3081. 替换字符串中的问号使分数最小 3082. 求出所有子序列的能量和 一、求出加密整数的和 按照题目要求&#xff0c;直接模拟即可&#xff0c;代码如下 class Solution { public:int sumOfEncryptedInt…

设计模式 适配器模式

1.背景 适配器模式&#xff0c;这个模式也很简单&#xff0c;你笔记本上的那个拖在外面的黑盒子就是个适配器&#xff0c;一般你在中国能用&#xff0c;在日本也能用&#xff0c;虽然两个国家的的电源电压不同&#xff0c;中国是 220V&#xff0c;日本是 110V&#xff0c;但是这…

ES的集群节点发现故障排除指南(2)

本文是ES官方文档关于集群节点发现与互联互通的问题排查指南内容&#xff0c;第二部分。 原文参考及相关内容&#xff1a; 英文原文&#xff08;官网&#xff09; 第一部分-&#xff08;1&#xff09; 已选出主节点但状态不稳定&#xff1f; 当一个节点赢得主节点选举时&…

XR“黑话”

MTP&#xff08;Motion-To-Photon Latency&#xff09;&#xff1a;实际人体发生运动到图像显示到屏幕上的时间延迟。早期一些vr产生晕动症的主要原因。 ATW&#xff08;Asynchronous Timewarp&#xff09;&#xff1a;主要解决两个问题&#xff0c;一是延迟&#xff0c;二是补…

AI大模型学习在当前技术环境下的重要性与发展前景

目录 前言1 学科基础与技能要求1.1 数学基础的深厚性1.2 编程能力的必要性1.3 对特定领域业务场景的了解 2 模型结构与算法的优化2.1 模型结构的不断演进2.2 算法优化的重要性2.3 准确性与效率的提升 3 AI大模型学习的应用场景3.1 自然语言处理3.2 计算机视觉3.3 推荐系统 结语…