当前位置: 首页 > article >正文

双目相机深度的误差分析(基线长度和相机焦距的选择)

全文基于针孔模型和基线水平放置来讨论

影响双目计算深度的因素:

  • 1、基线长度:两台相机光心之间距离
  • 2、相机焦距(像素): f x f_x fx(或 f y f_y fy)为焦距 f f f和一个缩放比例的乘积。在针孔相机模型中,焦距 f f f 是从针孔(即光心)到成像平面的距离。而 f x f_x fx实际上指的是以像素为单位的“有效焦距”,它将物理世界中的距离转换到了图像坐标系下的像素距离,在讨论相机时,一般是讨论 f x f_x fx(或 f y f_y fy)。
  • 3、算法匹配的精确度:计算视差时候的精度
  • 4、物体深度:随着物体越远,理论误差会越大

当我们有两个不同位置拍摄的同一物体的图像时,可以通过比较这两个图像中物体的位置差异(即视差)来计算该物体与相机之间的距离。
请添加图片描述

根据相似三角形原理,可以得到视差与深度关系:
disparity = x − x ′ = B f Z \text{disparity} = x - x' = \frac{Bf}{Z} disparity=xx=ZBf

  • xx’ 分别表示对应于3D场景点X在两张图片中的位置。
  • B 是两个相机之间的距离,即基线长度。
  • f 是相机的焦距(像素)。
  • Z 是物体到相机平面的距离(深度)。
  • disparity 是同一个点在两个不同视角下的图像中的水平位移。一般会把图像在y轴对齐,之后沿着x轴搜索对应的像素。
    可参考opencv文档:https://docs.opencv.org/4.x/dd/d53/tutorial_py_depthmap.html

可以得到深度的计算公式为:
Z = B f disparity Z = \frac{Bf}{\text{disparity}} Z=disparityBf
可以看深度和视差成反比,深度焦距(像素)或者基线长度成正比关系,我们测量深度时候,肯定是希望越准确越好,因此焦距和基线长度在硬件上面需要好好选型,而视差是跟算法相关,视差的计算肯定是存在误差,这会导致深度估计肯定也有误差,因此像素匹配越精确越好。

焦距:

先补充一些焦距知识:
我们首先要确认研究的范围,假设研究深度是15m-24m,水平视野FOV是40°。对此,我们肯定会选取水平视野为40°的相机,如果对应镜头是8mm,图像大小是1920*1200,根据
Sensor Size = 2 × f × tan ⁡ ( FOV 2 ) \text{Sensor Size} = 2 \times f \times \tan(\frac{\text{FOV}}{2}) Sensor Size=2×f×tan(2FOV)
所以,传感器尺寸为

Sensor Size = 2 × 8 × tan ⁡ ( 40 ∘ / 2 ) ≈ 5.76 mm \text{Sensor Size} = 2 \times 8 \times \tan(40^\circ / 2) \approx 5.76\text{mm} Sensor Size=2×8×tan(40/2)5.76mm

计算像素焦距
像素焦距通常指的是将物理焦距转换到像素域的比例因子。可以通过下面的公式估算:
Pixel Focal Length = Focal Length in mm Sensor Size in mm × Image Size in pixels \text{Pixel Focal Length} = \frac{\text{Focal Length in mm}}{\text{Sensor Size in mm}} \times \text{Image Size in pixels} Pixel Focal Length=Sensor Size in mmFocal Length in mm×Image Size in pixels
因此,水平方向像素焦距fx为:
Pixel Focal Length = 8 5.76 × 1920 ≈ 2667 pixels (标定实测结果是 2672 p i x e l ) \text{Pixel Focal Length} = \frac{8}{5.76} \times 1920 \approx 2667\text{ pixels} \\(标定实测结果是2672pixel) Pixel Focal Length=5.768×19202667 pixels(标定实测结果是2672pixel

平时工作我们会更换镜头,测试哪个焦距效果更好,那么假设保持传感器不变,更换16mm镜头,那么像素焦距和视野怎么变呢?
FOV = 2 × arctan ⁡ ( Sensor Size 2 × f ) \text{FOV} = 2 \times \arctan\left(\frac{\text{Sensor Size}}{2 \times f}\right) FOV=2×arctan(2×fSensor Size)
所以新视野为:
FOV = 2 × arctan ⁡ ( 5.76 2 × 16 ) ≈ 20 ∘ \text{FOV} = 2 \times \arctan\left(\frac{\text{5.76}}{2 \times 16}\right) \approx 20^\circ FOV=2×arctan(2×165.76)20
Pixel Focal Length = 16 5.76 × 1920 ≈ 5333 pixels (标定实测结果是 5419 ) \text{Pixel Focal Length} = \frac{16}{5.76} \times 1920 \approx 5333\text{ pixels} \\(标定实测结果是5419) Pixel Focal Length=5.7616×19205333 pixels(标定实测结果是5419

对此,我们可以得到结论:

  • 视野大小与焦距成反比关系。
  • 像素焦距与物理焦距成正比关系。

双目视觉基础

在双目视觉系统中,假设两个相机的焦距为 f f f(单位:像素),基线长度(两相机光心之间的距离)为 B B B(单位:米),某点在左、右图像上的投影坐标分别为 ( x l , y ) (x_l, y) (xl,y) ( x r , y ) (x_r, y) (xr,y),其中 x l x_l xl x r x_r xr 分别是该点在左右图像中的横坐标, y y y 是纵坐标(由于进行了极线校正,所有对应点都在同一水平线上)。则该点的视差 d d d 定义为:

d = x l − x r d = x_l - x_r d=xlxr

深度计算公式

根据相似三角形原理,在已知焦距 f f f、基线 B B B 以及视差 d d d 的情况下,可以计算出物体到相机的距离 Z Z Z(即深度)如下:

Z = f B d Z = \frac{fB}{d} Z=dfB

这里的 Z Z Z 表示的是物体相对于相机平面的实际距离。

深度误差分析

为了计算深度误差 Δ Z \Delta Z ΔZ,我们需要考虑视差测量误差 Δ d \Delta d Δd 对深度计算的影响。通过微分法对深度公式进行变换,我们可以得到深度误差与视差误差之间的关系:

Z = f B d Z = \frac{fB}{d} Z=dfB

对上式两边同时取微分,得:

d Z = − f B d 2 d d dZ = -\frac{fB}{d^2}dd dZ=d2fBdd

从而,

Δ Z = ∣ d Z d d ∣ Δ d = f B d 2 Δ d \Delta Z = \left| \frac{dZ}{dd} \right| \Delta d = \frac{fB}{d^2} \Delta d ΔZ= dddZ Δd=d2fBΔd

Z = f B d Z = \frac{fB}{d} Z=dfB 代入上述公式中替换掉 f B d 2 \frac{fB}{d^2} d2fB,可得:

Δ Z = Z 2 ⋅ Δ d f B \Delta Z = \frac{Z^2 \cdot \Delta d}{fB} ΔZ=fBZ2Δd

这个公式说明了深度误差与物体到相机的距离平方成正比,与视差误差成正比,而与焦距和基线长度成反比。这表明对于远距离物体,即使是小的视差误差也会导致较大的深度误差;相反,增加焦距或基线长度可以减小深度误差。


根据之前的参数(相机分辨率为1920x1200,焦距为2667像素,基线长度为400mm,工作距离在15m到24m之间),我们可以对视差误差进行评估。

计算过程

给定条件:

  • 工作距离 Z Z Z:15m 到 24m
  • 焦距 f f f:2667 像素
  • 基线长度 B B B:0.4 米

假设视差误差 Δ d \Delta d Δd为1像素(很理想的状态了,实际更大),我们可以计算出不同工作距离下的深度误差 Δ Z \Delta Z ΔZ

对于15米的工作距离

Δ Z 15 m = ( 15 ) 2 ⋅ 1 2667 ⋅ 0.4 = 225 1066.8 ≈ 0.2109 米 \Delta Z_{15m} = \frac{(15)^2 \cdot 1}{2667 \cdot 0.4} = \frac{225}{1066.8} \approx 0.2109 \text{米} ΔZ15m=26670.4(15)21=1066.82250.2109

对于24米的工作距离

Δ Z 24 m = ( 24 ) 2 ⋅ 1 2667 ⋅ 0.4 = 576 1066.8 ≈ 0.5721 米 \Delta Z_{24m} = \frac{(24)^2 \cdot 1}{2667 \cdot 0.4} = \frac{576}{1066.8} \approx 0.5721 \text{米} ΔZ24m=26670.4(24)21=1066.85760.5721

工作距离 (米)误差 ($ \Delta Z $,米)
15 15 2 1066.8 ≈ 0.2109 \frac{15^2}{1066.8} \approx 0.2109 1066.81520.2109
16 16 2 1066.8 ≈ 0.2403 \frac{16^2}{1066.8} \approx 0.2403 1066.81620.2403
17 17 2 1066.8 ≈ 0.2722 \frac{17^2}{1066.8} \approx 0.2722 1066.81720.2722
18 18 2 1066.8 ≈ 0.3065 \frac{18^2}{1066.8} \approx 0.3065 1066.81820.3065
19 19 2 1066.8 ≈ 0.3433 \frac{19^2}{1066.8} \approx 0.3433 1066.81920.3433
20 20 2 1066.8 ≈ 0.3824 \frac{20^2}{1066.8} \approx 0.3824 1066.82020.3824
21 21 2 1066.8 ≈ 0.4239 \frac{21^2}{1066.8} \approx 0.4239 1066.82120.4239
22 22 2 1066.8 ≈ 0.4679 \frac{22^2}{1066.8} \approx 0.4679 1066.82220.4679
23 23 2 1066.8 ≈ 0.5142 \frac{23^2}{1066.8} \approx 0.5142 1066.82320.5142
24 24 2 1066.8 ≈ 0.5721 \frac{24^2}{1066.8} \approx 0.5721 1066.82420.5721

因此,在1像素的视差误差下,对于15米的工作距离,预计的深度误差大约为0.2109米;而对于24米的工作距离,深度误差大约为0.5721米。这个计算是基于理想的视差估计误差为1像素的情况。实际上,视差估计误差可能会大于1像素,特别是在存在图像噪声、光照变化或纹理缺乏的情况下,这将导致更大的深度误差。

从上面可以看到当距离较远时,对我们的匹配要求的准确度极高,这是很难做到的,因此需要升级硬件,从深度的误差公式,我们可以看到,在匹配算法无法优化的情况下,可以增大焦距和基线的长度,焦距增大n倍,则深度误差少n倍;基线长度长n倍,则深度误差少n倍。


标定的效果也会影响到深度误差:

焦距误差对深度误差的影响

假设焦距存在一个微小的误差 Δ f \Delta f Δf,我们想要知道这个误差如何影响最终计算出来的深度 Z Z Z。为此,我们需要对原始深度公式进行微分,以找到焦距误差 Δ f \Delta f Δf 与深度误差 Δ Z \Delta Z ΔZ 之间的关系。
原公式:
Z = f B d Z = \frac{fB}{d} Z=dfB
首先,将原始深度公式两边同时对 f f f 求导,得到:

∂ Z ∂ f = B d \frac{\partial Z}{\partial f} = \frac{B}{d} fZ=dB

这表示深度 Z Z Z 对焦距 f f f 的变化率。因此,对于一个小的焦距误差 Δ f \Delta f Δf,对应的深度误差 Δ Z \Delta Z ΔZ 可以近似为:

Δ Z ≈ ∂ Z ∂ f Δ f = B d Δ f \Delta Z \approx \frac{\partial Z}{\partial f} \Delta f = \frac{B}{d} \Delta f ΔZfZΔf=dBΔf

但是,通常更关心的是相对误差,即深度误差相对于实际深度的比例。所以,我们将上面的结果转换成相对形式:

Δ Z Z ≈ Δ f f \frac{\Delta Z}{Z} \approx \frac{\Delta f}{f} ZΔZfΔf

这是因为:

Z = f B d Z = \frac{fB}{d} Z=dfB

所以,

Δ Z Z = B d Δ f f B d = Δ f f \frac{\Delta Z}{Z} = \frac{\frac{B}{d}\Delta f}{\frac{fB}{d}} = \frac{\Delta f}{f} ZΔZ=dfBdBΔf=fΔf

这意味着焦距误差导致的深度误差与其相对于焦距的比例相同。换句话说,如果焦距测量存在1%的误差,则计算出的深度也会有大约1%的误差。如果焦距有1%,此时深度是20m,则深度的误差就有0.2m。这种线性关系表明,在设计和校准双目视觉系统时,精确确定焦距是非常重要的,因为它直接影响到深度估计的准确性。


接下来推导 基线长度误差(即双目相机之间的距离误差)与 深度误差 之间的关系。

基线长度误差对深度误差的影响

原公式:
Z = f B d Z = \frac{fB}{d} Z=dfB

将深度公式视为关于 B B B 的函数:

Z ( B ) = f B d Z(B) = \frac{fB}{d} Z(B)=dfB

对其求微分:

∂ Z ∂ B = f d \frac{\partial Z}{\partial B} = \frac{f}{d} BZ=df

所以,当基线长度存在一个小的误差 Δ B \Delta B ΔB 时,对应的深度误差近似为:

Δ Z ≈ ∂ Z ∂ B ⋅ Δ B = f d ⋅ Δ B \Delta Z \approx \frac{\partial Z}{\partial B} \cdot \Delta B = \frac{f}{d} \cdot \Delta B ΔZBZΔB=dfΔB

也可以用相对误差形式表示:

Δ Z Z = Δ B B \frac{\Delta Z}{Z} = \frac{\Delta B}{B} ZΔZ=BΔB

因为:

Δ Z Z = f d Δ B f B d = Δ B B \frac{\Delta Z}{Z} = \frac{\frac{f}{d} \Delta B}{\frac{fB}{d}} = \frac{\Delta B}{B} ZΔZ=dfBdfΔB=BΔB

绝对误差关系:

Δ Z = f d ⋅ Δ B \Delta Z = \frac{f}{d} \cdot \Delta B ΔZ=dfΔB
相对误差关系:

Δ Z Z = Δ B B \frac{\Delta Z}{Z} = \frac{\Delta B}{B} ZΔZ=BΔB

  • 深度误差 Δ Z \Delta Z ΔZ 与基线误差 Δ B \Delta B ΔB 成正比。
  • 如果你高估了基线长度( Δ B > 0 \Delta B > 0 ΔB>0),那么你也会高估物体的深度( Δ Z > 0 \Delta Z > 0 ΔZ>0)。
  • 在相对误差层面,深度误差百分比等于基线误差百分比。例如,如果基线被低估了5%,则深度也会被低估5%。
  • 这说明在双目系统中,精确测量基线长度非常关键,尤其是在远距离测量或高精度应用中。

计算(使用之前参数)
  • 焦距 f = 2667 f = 2667 f=2667 像素
  • 基线 B = 0.4 B = 0.4 B=0.4
  • 工作距离 Z = 24 Z = 24 Z=24
  • 视差 d = f B Z = 2667 × 0.4 15 = 72 d = \frac{fB}{Z} = \frac{2667 \times 0.4}{15} = 72 d=ZfB=152667×0.4=72 像素

假设基线误差 Δ B = 1 \Delta B = 1 ΔB=1 mm = 0.001 m:

Δ Z = f d ⋅ Δ B = 2667 72 ⋅ 0.001 = 37 ⋅ 0.001 = 0.037 米 = 3.7 cm \Delta Z = \frac{f}{d} \cdot \Delta B = \frac{2667}{72} \cdot 0.001 = 37 \cdot 0.001 = 0.037 \text{ 米} = 3.7 \text{ cm} ΔZ=dfΔB=7226670.001=370.001=0.037 =3.7 cm

所以在这种情况下,1毫米的基线误差会导致约3.7厘米的深度误差


相关文章:

双目相机深度的误差分析(基线长度和相机焦距的选择)

全文基于针孔模型和基线水平放置来讨论 影响双目计算深度的因素: 1、基线长度:两台相机光心之间距离2、相机焦距(像素): f x f_x fx​(或 f y f_y fy​)为焦距 f f f和一个缩放比例的乘积。在…...

Pytorch Geometric官方例程pytorch_geometric/examples/link_pred.py环境安装教程及图数据集制作

最近需要训练图卷积神经网络(Graph Convolution Neural Network, GCNN),在配置GCNN环境上总结了一些经验。 我觉得对于初学者而言,图神经网络的训练会有2个难点: ①环境配置 ②数据集制作 一、环境配置 我最初光想…...

React---day6、7

6、组件之间进行数据传递 **6.1 父传子&#xff1a;**props传递属性 父组件&#xff1a; <div><ChildCpn name"蒋乙菥" age"18" height"1,88" /> </div>子组件&#xff1a; export class ChildCpn extends React.Component…...

hook组件-useEffect、useRef

hook组件-useEffect、useRef useEffect 用法及执行机制 WillMount -> render -> DidMount ShouldUpdate -> WillUpdate -> render -> DidUpdate WillUnmount(只有这个安全) WillReceiveProps useEffect(callback) 默认所有依赖都更新useEffect(callback, [])&am…...

功能结构整理

C# Sxer Sxer.Base&#xff1a;基础子功能 Sxer.Base.Debug&#xff1a;打印 Sxer.Utility&#xff1a;工具类 Sxer.CustomFunction&#xff1a;独立功能点开发 Unity...

企业级开发中的 maven-mvnd 应用实践

1. 引言:Maven 在企业级开发中的挑战 1.1 Maven 构建的常见痛点 在大型 Java 项目中,Maven 是主流的构建工具,但随着项目的复杂度增加,其性能瓶颈逐渐显现: 构建速度慢:每次执行 mvn clean install 都需要重新加载插件和依赖。重复构建浪费资源:即使未修改源码,仍会触…...

yolov12毕设前置知识准备 1

1 什么是目标检测呢&#xff1f; 目标检测&#xff08;Object Detection&#xff09;主要用于识别图像或视频中特定类型物体的位置&#xff0c;并标注其类别。 简单来说&#xff0c;就是让计算机像人类一样 “看懂” 图像内容&#xff0c;不仅能识别出物体&#xff08;如人、…...

随机游动算法解决kSAT问题

input&#xff1a;n个变量的k-CNF公式 ouput&#xff1a;该公式的一组满足赋值或宣布没有满足赋值 算法步骤&#xff1a; 随机均匀地初始化赋值 a ∈ { 0 , 1 } n a\in\{0,1\}^n a∈{0,1}n.重复t次&#xff08;后面会估计这个t&#xff09;&#xff1a; a. 如果在当前赋值下…...

《Discuz! X3.5开发从入门到生态共建》第1章 Discuz! 的前世今生-优雅草卓伊凡

《Discuz! X3.5开发从入门到生态共建》第1章 Discuz! 的前世今生-优雅草卓伊凡 第一节 从康盛创想到腾讯收购&#xff1a;PC时代的辉煌 1.1 Discuz! 的诞生&#xff1a;康盛创想的开源梦想 2001年&#xff0c;中国互联网正处于萌芽阶段&#xff0c;个人网站和论坛开始兴起。…...

azure web app创建分步指南系列之一

什么是 Azure Web 应用? Azure Web 应用是 Azure 应用服务的一部分,是一个完全托管的平台,用于开发、部署和扩展 Web 应用程序。它支持各种编程语言和框架,例如 .NET、Java、Python、PHP 和 Node.js,使开发人员能够构建强大的 Web 应用程序,而无需担心底层基础架构。借助…...

PyTorch实战——基于生成对抗网络生成服饰图像

PyTorch实战——基于生成对抗网络生成服饰图像 0. 前言1. 模型分析与数据准备2. 判别器3. 生成器4. 模型训练5. 模型保存与加载相关链接0. 前言 我们已经学习了生成对抗网络 (Generative Adversarial Network, GAN) 的工作原理,接下来,将学习如何将其应用于生成其他形式的内…...

笔试强训:Day6

一、小红的口罩&#xff08;贪心优先级队列&#xff09; 登录—专业IT笔试面试备考平台_牛客网 #include<iostream> #include<queue> #include<vector> using namespace std; int n,k; int main(){//用一个小根堆 每次使用不舒适度最小的cin>>n>&…...

【Hexo】4.Hexo 博客文章进行加密

安装 npm install --save hexo-blog-encrypt1-快速使用 将“ password”添加到您的文章信息头就像这样&#xff1a; password: 123456 ---2-按标签加密 1.修改文章信息头如下&#xff1a; title: Hello World tags: - 加密文章tag date: 2020-03-13 21:12:21 password: muyiio…...

Android --- ObjectAnimator 和 TranslateAnimation有什么区别

文章目录 2. 作用范围和功能2. 动画表现3. 是否修改 View 的属性4. 适用场景5. 性能总结&#xff1a; ObjectAnimator 和 TranslateAnimation 都是 Android 中常用的动画类型&#xff0c;但它们有以下几个关键的区别&#xff1a; 2. 作用范围和功能 ObjectAnimator&#xff1a…...

小白的进阶之路系列之四----人工智能从初步到精通pytorch自定义数据集下

本篇涵盖的内容 在之前的文章中,我们已经讨论了如何获取数据,转换数据以及如何准备自定义数据集,本篇文章将涵盖更加深入的问题,希望通过详细的代码示例,帮助大家了解PyTorch自定义数据集是如何应对各种复杂实际情况中,数据处理的。 更加详细的,我们将讨论下面一些内容…...

安卓添加设备节点权限和selinux访问权限

# 1 修改设备节点权限及配置属性设置节点值 ## 1.1 修改设备节点权限 ### 1.1.1 不会手动卸载的节点 在system/core/rootdir/init.rc中添加节点权限 在on boot下面添加 chown system system /sys/kernel/usb/host chmod 0664 /sys/kernel/usb/host ### 1.1.2 支持热插拔的…...

谷歌Stitch:AI赋能UI设计,免费高效新利器

在AI技术日新月异的今天&#xff0c;各大科技巨头都在不断刷新我们对智能工具的认知。最近&#xff0c;谷歌在其年度I/O开发者大会期间&#xff0c;除了那些聚光灯下的重磅发布&#xff0c;还悄然上线了一款令人惊喜的AI工具——Stitch。这是一款全新的、完全免费的AI驱动UI&am…...

运营商地址和ip属地一样吗?怎么样更改ip属地地址

‌在互联网时代&#xff0c;IP属地和运营商地址是两个经常被提及的概念&#xff0c;但它们是否相同&#xff1f;如何更改IP属地地址&#xff1f;这些问题困扰着许多网民。本文将深入探讨这两个概念的区别&#xff0c;并详细介绍更改IP属地地址的方法。 一、运营商地址和IP属地一…...

在QT中,利用charts库绘制FFT图形

第1章 添加charts库 1.1 .pro工程添加chart库 1.1.1 在.pro工程里面添加charts库 1.1.2 在需要使用的地方添加这两个库函数&#xff0c;顺序一点不要搞错&#xff0c;先添加.pro&#xff0c;否则编译器会找不到这两个.h文件。 第2章 Charts关键绘图函数 2.1 QChart 类 QChart 是…...

ChatGPT + 知网 + 知乎,如何高效整合信息写出一篇专业内容?

——写作&#xff0c;不是闭门造车&#xff0c;而是高效聚合 &#x1f9e0; 为什么“信息整合力”才是AI时代的核心写作能力&#xff1f; 现在的写作&#xff0c;不缺工具&#xff0c;也不缺资料&#xff0c;缺的是&#xff1a; 把 scattered info 变成 structured idea 的能力…...

流媒体协议分析:流媒体传输的基石

在流媒体传输过程中&#xff0c;协议的选择至关重要&#xff0c;它决定了数据如何封装、传输和解析&#xff0c;直接影响着视频的播放质量和用户体验。本文将深入分析几种常见的流媒体传输协议&#xff0c;探讨它们的特点、应用场景及优缺点。 协议分类概述 流媒体传输协议根据…...

vscode中让文件夹一直保持展开不折叠

vscode中让文件夹一直保持展开不折叠 问题 很多小伙伴使用vscode发现空文件夹会折叠显示, 让人看起来非常难受, 如下图 解决办法 首先打开设置->setting, 搜索compact Folders, 去掉勾选即可, 如下图所示 效果如下 看起来非常爽 ! ! !...

JAVA-springboot整合Mybatis

SpringBoot从入门到精通-第15章 MyBatis框架 学习MyBatis心路历程 2022年学习java基础时候&#xff0c;想着怎么使用java代码操作数据库&#xff0c;咨询了项目上开发W同事&#xff0c;没有引用框架&#xff0c;操作数据库很麻烦&#xff0c;就帮我写好多行代码&#xff0c;就…...

深度学习pycharm debug

深度学习中&#xff0c;Debug 是定位并解决代码逻辑错误&#xff08;如张量维度不匹配&#xff09;、训练异常&#xff08;如 Loss 波动&#xff09;、数据问题&#xff08;如标签错误&#xff09;的关键手段&#xff0c;通过打印维度、可视化梯度等方法确保模型正常运行、优化…...

MicroPython+L298N+ESP32控制电机转速

要使用MicroPython控制L298N电机驱动板来控制电机的转速&#xff0c;你可以通过PWM&#xff08;脉冲宽度调制&#xff09;信号来调节电机速度。L298N是一个双H桥驱动器&#xff0c;可以同时控制两个电机的正反转和速度。 硬件准备&#xff1a; 1. L298N 电机控制板 2. ESP32…...

Hive的存储格式如何优化?

Hive的存储格式对查询性能、存储成本和数据处理效率有显著影响。以下是主流存储格式的特点、选择标准和优化方法&#xff1a; 一、主流存储格式对比 特性ORC&#xff08;Optimized Row Columnar&#xff09;ParquetTextFile&#xff08;默认&#xff09;SequenceFile数据布局…...

在部署了一台mysql5.7的机器上部署mysql8.0.35

在已部署 MySQL 5.7 的机器上部署 MySQL 8.0.35 的完整指南 在同一台服务器上部署多个 MySQL 版本需要谨慎规划&#xff0c;避免端口冲突和数据混淆。以下是详细的部署步骤&#xff1a; 一、规划配置 端口分配 MySQL 5.7&#xff1a;使用默认端口 3306MySQL 8.0.35&#xff1…...

OpenCV CUDA模块结构分析与形状描述符------在 GPU 上计算图像的原始矩(spatial moments)函数spatialMoments()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于在 GPU 上计算图像的原始矩&#xff08;spatial moments&#xff09;。这些矩可用于描述图像中物体的形状特征&#xff0c;如面积、质…...

QT入门学习(一)---新建工程与、信号与槽

一: 新建QT项目 二:QT文件构成 2.1 first.pro 项目管理文件&#xff0c;下面来看代码解析 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11TARGET main# The following define makes your compiler emit warnings if you use # any Qt feature …...

UE5.4.4+Rider2024.3.7开发环境配置

文章目录 一、UE5安装 安装有两种方式一种的源码编译安装、一种是EPIC安装&#xff0c;推荐后者&#xff0c;只需要注册一个EPIC账号就可以一键安装。 二、C环境安装 1.下载VisualStudioSetup 下载链接如下下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 选择社…...