【立体视觉(一)】之成像原理与相机畸变

  • 一、成像原理
    • 一)针孔模型
    • 二)坐标系转换
      • 1. 世界坐标系到相机坐标系
      • 2. 相机坐标系到图像坐标系
      • 3. 图像坐标系到像素坐标系
      • 4. 相机坐标系到像素坐标系
      • 5. 世界坐标系到像素坐标系
  • 二、相机畸变
    • 一)径向畸变
      • 径向畸变矫正
    • 二)切向畸变
      • 切向畸变校正
    • 三)总畸变校正

此为个人学习笔记,在各处借鉴了不少好图好文(参考文献在文末),主要是对相关知识进行梳理,以期形成自己的体系。文字表述东拼西凑,符号公式手动输入,若有错误烦请指出。

一、成像原理

一)针孔模型

在科学研究中,一个现象内部的过程总是复杂而难以清晰看透,而聪明的学者们总会用最简单的模型去做初始描述,提出一个相对简单的模型。成像过程亦不例外,他们将三维世界中的坐标点映射到二维图像平面的过程用一个几何模型进行描述,这个模型有很多种,其中最简单的称为针孔模型。

注意,在探究成像过程中,常使用虚拟成像平面进行分析。

二)坐标系转换


从真实世界(世界坐标系)中一点到相片(像素坐标系)上的成像点涉及以下四个坐标系间的转换。

  • 世界坐标系(World Coordinate System, WCS):点在真实世界中的位置,描述相机位置,单位m。
  • 相机坐标系(Camera Coordinate System, CCS):相机sensor中心为原点,建立相机坐标系,单位m。
  • 图像坐标系(Film Coordinate System, FCS):以主点为原点的二维坐标系,单位mm。
  • 像素坐标系(Pixel Coordinate System, PCS):原点为相片左上角的二维坐标系,单位无或pixel。

接下来按以下步骤介绍相机成像过程中某点在各个坐标系间的变换。

1. 世界坐标系到相机坐标系

世界坐标系到相机坐标系(World to Camera,W2C),就是简单的三维坐标系转换(三个坐标轴方向与原点的变化)。世界坐标系上一点 P w ( U , V , W ) {P_{w}(U,V,W)} Pw​(U,V,W) 到相机坐标系上一点 P c ( X , Y , Z ) {P_{c}(X,Y,Z)} Pc​(X,Y,Z):

[ X Y Z ] = [ R 3 × 3 T 3 × 1 ] [ U V W 1 ] \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix}= \begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ \end{bmatrix} \begin{bmatrix} {U}\\ {V}\\ {W}\\ {1}\\ \end{bmatrix} ​XYZ​ ​=[R3×3​​T3×1​​] ​UVW1​ ​

或使用其次矩阵表达:

[ X Y Z 1 ] = [ R 3 × 3 T 3 × 1 O 1 ] [ U V W 1 ] \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ {O}&{1}\\ \end{bmatrix} \begin{bmatrix} {U}\\ {V}\\ {W}\\ {1}\\ \end{bmatrix} ​XYZ1​ ​=[R3×3​O​T3×1​1​] ​UVW1​ ​

其中, [ R 3 × 3 T 3 × 1 ] \begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ \end{bmatrix} [R3×3​​T3×1​​] (或 [ R 3 × 3 T 3 × 1 O 1 ] \begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ {O}&{1}\\ \end{bmatrix} [R3×3​O​T3×1​1​])被称为相机的外参矩阵(Extrinsic Matrix),描述的是世界坐标中相机的位置( T 3 × 1 T_{3\times1} T3×1​),及其指向方向( R 3 × 3 R_{3\times3} R3×3​)。


2. 相机坐标系到图像坐标系

相机坐标系到图像坐标系( Camera to Film,C2F),这里由三维坐标 P c ( X , Y , Z ) {P_{c}(X,Y,Z)} Pc​(X,Y,Z) 降维到二维坐标 p ( x , y ) {p(x,y)} p(x,y) 。

根据相似三角,得:

x X = y Y = f Z \frac{x}{X}=\frac{y}{Y}=\frac{f}{Z} Xx​=Yy​=Zf​

则:
[ x y 1 ] = [ f Z 0 0 0 f Z 0 0 0 1 Z ] [ X Y Z ] \begin{bmatrix} {x}\\ {y}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {\frac{f}{Z}}&{0}&{0}\\ {0}&{\frac{f}{Z}}&{0}\\ {0}&{0}&{\frac{1}{Z}}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix} ​xy1​ ​= ​Zf​00​0Zf​0​00Z1​​ ​ ​XYZ​ ​


3. 图像坐标系到像素坐标系

图像坐标系到像素坐标系(Film to Pixel,F2P)是一个简单的仿射变换 (Affine Transformation)过程,主要包括原点的移动和尺度的变换。

有:
u = x d x + u 0 , v = y d y + v 0 u=\frac{x}{d_x}+u_0, v=\frac{y}{d_y}+v_0 u=dx​x​+u0​,v=dy​y​+v0​

矩阵形式:
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] \begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {\frac{1}{d_x}}&{0}&{u_0}\\ {0}&{\frac{1}{d_y}}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {x}\\ {y}\\ {1}\\ \end{bmatrix} ​uv1​ ​= ​dx​1​00​0dy​1​0​u0​v0​1​ ​ ​xy1​ ​


4. 相机坐标系到像素坐标系

现在开始回溯,接上一步,相机坐标系到像素坐标系(Camera to Film, C2F)有:
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ f Z 0 0 0 f Z 0 0 0 1 Z ] [ X Y Z ] = 1 Z [ f d x 0 u 0 0 f d y v 0 0 0 1 ] [ X Y Z ] \begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {\frac{1}{d_x}}&{0}&{u_0}\\ {0}&{\frac{1}{d_y}}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {\frac{f}{Z}}&{0}&{0}\\ {0}&{\frac{f}{Z}}&{0}\\ {0}&{0}&{\frac{1}{Z}}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix}=\frac{1}{Z} \begin{bmatrix} {\frac{f}{d_x}}&{0}&{u_0}\\ {0}&{\frac{f}{d_y}}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix} ​uv1​ ​= ​dx​1​00​0dy​1​0​u0​v0​1​ ​ ​Zf​00​0Zf​0​00Z1​​ ​ ​XYZ​ ​=Z1​ ​dx​f​00​0dy​f​0​u0​v0​1​ ​ ​XYZ​ ​

其中, f d x 、 f d y \frac{f}{d_x}、\frac{f}{d_y} dx​f​、dy​f​ 即焦距除以像素尺寸,单位为pixel,表示焦距在两个像元方向上的像素单位值。由于在相机标定过程中 f 、 d x 、 d y {f}、{d_x}、{d_y} f、dx​、dy​ 是不能直接测量的,而其组合值 f d x 、 f d y \frac{f}{d_x}、\frac{f}{d_y} dx​f​、dy​f​ 可通过标定得到,故可用 f x = f d x 、 f y = f d y {f_x}=\frac{f}{d_x}、{f_y}=\frac{f}{d_y} fx​=dx​f​、fy​=dy​f​ 来表示两个组合值。那么:
[ u v 1 ] = 1 Z [ f x 0 u 0 0 f y v 0 0 0 1 ] [ X Y Z ] \begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \frac{1}{Z} \begin{bmatrix} {f_x}&{0}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix} ​uv1​ ​=Z1​ ​fx​00​0fy​0​u0​v0​1​ ​ ​XYZ​ ​

若像素坐标系中两坐标轴不垂直(此时像元不是矩形,而是平行四边形),那么相机内参中还有一个偏斜系数 s s s(skew coefficient), s = f x t a n ( α ) s=f_x tan(\alpha) s=fx​tan(α),有兴趣可以推导一下。


此时:
[ u v 1 ] = 1 Z [ f x s u 0 0 f y v 0 0 0 1 ] [ X Y Z ] \begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \frac{1}{Z} \begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix} ​uv1​ ​=Z1​ ​fx​00​sfy​0​u0​v0​1​ ​ ​XYZ​ ​

其中, [ f x s u 0 0 f y v 0 0 0 1 ] \begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} ​fx​00​sfy​0​u0​v0​1​ ​ 为相机的内参矩阵(Intrinsics Matrix),描述相机坐标系到像素坐标系的变换关系,反应了相机自身的属性,通常用符号 K K K表示(注意,很多版本里的内参矩阵不含偏斜系数,即默认其为0)。在相机坐标系中, Z Z Z 对应为三维点的深度,常被称为尺度因子 λ \lambda λ,则相机坐标系到像素坐标系:
λ [ u v 1 ] = [ f x s u 0 0 f y v 0 0 0 1 ] [ X Y Z ] \lambda\begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix} λ ​uv1​ ​= ​fx​00​sfy​0​u0​v0​1​ ​ ​XYZ​ ​
令:
K = [ f x s u 0 0 f y v 0 0 0 1 ] K=\begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} K= ​fx​00​sfy​0​u0​v0​1​ ​
有:
λ p = K P c \lambda p=KP_c λp=KPc​

补充: Z = 1 Z=1 Z=1 的平面称为归一化平面,归一化平面上的坐标称为归一化坐标。


5. 世界坐标系到像素坐标系

世界坐标系到像素坐标系(World to Pixel,W2P),整个串起来:
λ [ u v 1 ] = [ f x s u 0 0 f y v 0 0 0 1 ] [ X Y Z ] = [ f x s u 0 0 f y v 0 0 0 1 ] [ R 3 × 3 T 3 × 1 ] [ U V W 1 ] \lambda\begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix}=\begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix}\begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ \end{bmatrix} \begin{bmatrix} {U}\\ {V}\\ {W}\\ {1}\\ \end{bmatrix} λ ​uv1​ ​= ​fx​00​sfy​0​u0​v0​1​ ​ ​XYZ​ ​= ​fx​00​sfy​0​u0​v0​1​ ​[R3×3​​T3×1​​] ​UVW1​ ​

世界坐标系到像素坐标系的转换实际上表达的是透视投影中空间点到像点的投影关系,所以把该转换矩阵叫做投影矩阵(Projection Matrix),常用 M M M表示 ,通过矩阵运算可知投影矩阵是一个3x4的矩阵,它是内参矩阵和外参矩阵的乘积。

λ p = K [ R 3 × 3 T 3 × 1 ] [ P w 1 ] = M [ P w 1 ] \lambda {p}=K \begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ \end{bmatrix} \begin{bmatrix} {P_w}\\ {1}\\ \end{bmatrix}=M\begin{bmatrix} {P_w}\\ {1}\\ \end{bmatrix} λp=K[R3×3​​T3×1​​][Pw​1​]=M[Pw​1​]

另外,若使用其次矩阵表达,矩阵维度会有所变化。


二、相机畸变

由于相机透镜的固有特性(凸透镜汇聚光线、凹透镜发散光线)导致成像直线会变成曲线。

相机畸变主要有径向畸变(radial distortion)和切向畸变 (tangential distortion)。

畸变特性:

  • 径向畸变主要由于透镜的几何形状改变了直线的形状。
  • 切向畸变主要由于透镜安装的时候没有与图像平面完美平行。
  • 实际经验中,图像几何更加关注径向畸变,因此有时候畸变图像校正的过程可能会忽略切向畸变。

一)径向畸变

径向畸变主要包括:

  • 桶形畸变 (barrel distortion)
  • 枕形畸变 (pincushion distortion)
  • 八字胡畸变 (mustache distortion)

可以看出,径向畸变图像的特点是:

  • 中心对称
  • 直线变曲
畸变 特点 场景
桶形畸变 中心放大了,离光心越远,图像放大率越小 鱼眼镜头,广角/全景图片
枕形畸变 枕形畸变挤压了图片,(就像压扁的枕头) 长焦镜头经常会出现枕形畸变,以消除球体效应
八字胡畸变 上述两种类型的混合,它开始时是靠近光轴的桶形畸变,然后逐渐向图像边缘枕形畸变

径向畸变矫正

一般情况下,图像的径向畸变可用一个低阶多项式模型来表示:

x u n d i s t = x d i s t ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y u n d i s t = y d i s t ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) x_{undist}=x_{dist}(1+k_1r^2+k_2r^4+k_3r^6) \\ y_{undist}=y_{dist}(1+k_1r^2+k_2r^4+k_3r^6) xundist​=xdist​(1+k1​r2+k2​r4+k3​r6)yundist​=ydist​(1+k1​r2+k2​r4+k3​r6)

其中 r 2 = x d i s t 2 + y d i s t 2 r^2=x_{dist}^2+y_{dist}^2 r2=xdist2​+ydist2​, ( x d i s t , y d i s t ) (x_{dist},y_{dist}) (xdist​,ydist​) 是归一化后的相机坐标系的点,即坐标原点已经移到主点,并且像素坐标除以焦距, x d i s t = X Z = u − u o f x x_{dist}=\frac{X}{Z}=\frac{u-u_o}{f_x} xdist​=ZX​=fx​u−uo​​ , y d i s t = Y Z = v − v o f y y_{dist}=\frac{Y}{Z}=\frac{v-v_o}{f_y} ydist​=ZY​=fy​v−vo​​,可以从畸变的图像中得到。 k 1 、 k 2 、 k 3 k_1、k_2、k_3 k1​、k2​、k3​ 是径向畸变参数(一般可使用多项式前两项,如鱼眼等畸变较大的相机会使用第三项,默认用三项总是没错的),可以用过棋盘格标定得到。

二)切向畸变

切向畸变由相机senser与透镜不平行导致。

切向畸变校正

图像的切向畸变也可用一个低阶多项式模型来表示:
x undist  = x dist  + [ 2 p 1 x dist  y dist  + p 2 ( r 2 + 2 x dist  2 ) ] y undist  = y dist  + [ p 1 ( r 2 + 2 y dist  2 ) + 2 p 2 x dist  y dist  ] x_{\text {undist }}=x_{\text {dist }}+\left[2 p_{1} x_{\text {dist }} y_{\text {dist }}+p_{2}\left(r^{2}+2 x_{\text {dist }}^{2}\right)\right]\\y_{\text {undist }}=y_{\text {dist }}+\left[p_{1}\left(r^{2}+2 y_{\text {dist }}^{2}\right)+2 p_{2} x_{\text {dist }} y_{\text {dist }}\right ] xundist ​=xdist ​+[2p1​xdist ​ydist ​+p2​(r2+2xdist 2​)]yundist ​=ydist ​+[p1​(r2+2ydist 2​)+2p2​xdist ​ydist ​]

p 1 p_1 p1​ 和 p 2 p_2 p2​ 为切向畸变参数。

三)总畸变校正

同时考虑径向畸变和切向畸变:

x u n d i s t = x d i s t ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + [ 2 p 1 x d i s t y d i s t + p 2 ( r 2 + 2 x d i s t 2 ) ] y u n d i s t = y d i s t ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + [ p 1 ( r 2 + 2 y d i s t 2 ) + 2 p 2 x d i s t y d i s t ] x_{{undist }}=x_{dist}(1+k_1r^2+k_2r^4+k_3r^6)+\left[2 p_{1} x_{{dist }} y_{{dist }}+p_{2}\left(r^{2}+2 x_{dist }^{2}\right)\right]\\ y_{ {undist }}=y_{dist}(1+k_1r^2+k_2r^4+k_3r^6)+\left[p_{1}\left(r^{2}+2 y_{{dist }}^{2}\right)+2 p_{2} x_ {dist }y_{ {dist }}\right] xundist​=xdist​(1+k1​r2+k2​r4+k3​r6)+[2p1​xdist​ydist​+p2​(r2+2xdist2​)]yundist​=ydist​(1+k1​r2+k2​r4+k3​r6)+[p1​(r2+2ydist2​)+2p2​xdist​ydist​]
共有5个畸变参数 k 1 、 k 2 、 k 3 、 p 1 、 p 2 k_1、k_2、k_3、p_1、p_2 k1​、k2​、k3​、p1​、p2​,这5个畸变参数与内参矩阵一起,都是需要进行相机标定。但是在OpenCV相机标定时输出顺序是 k 1 、 k 2 、 p 1 、 p 2 、 k 3 k_1、k_2、p_1、p_2、k_3 k1​、k2​、p1​、p2​、k3​,因为 k 3 k_3 k3​ 不重要,很多情况下不需要。(是不是很真实?)


参考:
[1] CSE/EE486 Computer Vision I
[2] 一文详解相机标定算法原理
[3] 立体视觉入门指南(1):坐标系与相机参数
[4] 相机标定(Camera calibration)原理及步骤

【立体视觉(一)】之成像原理与相机畸变相关推荐

  1. 图像成像原理与相机标定

    一.图像成像原理 世界坐标系到相机坐标系 世界坐标系是空间中根据需求任意指定的坐标系,相机坐标系是以镜头为原点,光心方向为Z轴方向的坐标系. 同一个点在不同坐标系下的坐标可以通过平移旋转的仿射变换得到 ...

  2. 【自动驾驶】16.计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换

    本篇博客为转载,我对其中的细节添加了一些说明. 原文链接:https://blog.csdn.net/chentravelling/article/details/53558096 0.前言 最近整理 ...

  3. 3D立体视觉成像原理介绍【一 】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 什么是基线? 基线是如何影响3D图像质量 激光三角测量 飞行时间 结构光相机 时间编码结构光 前言 本文将介绍3D立体 ...

  4. 相机成像原理_数码相机的工作原理

    数码相机也被称为数字相机.数码相机可以说是更广义的电子影像处理技术中的一类,其光学成像系统和常规的照相机并无差别,然而影像记录的方式却完全不同.常规相机使用的是化学光感材料,而数码相机使用的是一组光电 ...

  5. 相机成像原理_【科研进展】动态虚拟相机:探索三维视觉成像新方法

    由于微信公众号试行乱序推送,您可能没办法准时收到"爱光学"的文章.为了让您第一时间看到"爱光学"的新鲜推送, 请您: 1. 将"爱光学"点亮 ...

  6. 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换(转载)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chentravelling/article/details/53558096 0.前言 最近整理了& ...

  7. RGB相机、深度相机以及LiDAR成像原理

    RGB相机成像原理 相机结构和原理(入门简版)知乎 摄像机模型数学推导 相机结构 成像原理 大名鼎鼎的"拜尔滤镜" CMOS滤镜排列 像素尺寸.大小关系 景深 景深原理 卷帘相机( ...

  8. ORB-SLAM2从理论到代码实现(四):相机成像原理、基本矩阵、本质矩阵、单应矩阵、三角测量详解

    由于ORBmatcher.cc中有三角化和重投影等内容,所有我先写相机成像等多视图几何内容. 1. 相机的成像原理 假设空间中有一点P,它在世界坐标系中的坐标为,在相机坐标系中的坐标为,在图片中的像素 ...

  9. 相机成像原理_【亲子科学小实验】相机原理和小孔成像的秘密

    大家出去旅游的时候,都会带着照相机,拍下美景的同时,也给我们留下了永恒的回忆.但是,大家知不知道记录美好瞬间的照相机是如何工作成像的呢?下面就和小编一起来探究成像原理吧. 相机原理和小孔成像 材料 放 ...

最新文章

  1. leetcode:2680 Remove Duplicates from Sorted Array 删除数组中的重复元素
  2. 计算机视觉 | 哥大读博五年总结
  3. 一线城市中高端人才月薪超 2 万,电子通信行业应届生薪资涨幅最高
  4. linux关机命令详解
  5. JS 创建对象(常见的几种方法)
  6. 7.3.7 - 并发多线程 死锁和递归锁
  7. [题解]Codeforces Round #519 - B. Lost Array
  8. javaSE----学习路线
  9. 【转】XP下OpenProcess( PROCESS_ALL_ACCESS...失败
  10. 如何对西数硬盘固件进行逆向分析(下)
  11. 从零开始带你成为消息中间件实战高手_系统化开课了,电子入门一切从零开始,喜欢电子的有机会学习了...
  12. PDF文件如何修改,怎么裁剪PDF页面
  13. ccf201703-5 引水入城
  14. FPGA,关于安装使用libero IDE V9.2 及其gold floating license配置
  15. gromacs 安装_Gromacs 4.0.3、4.5.5版安装方法
  16. 数据仓库中历史拉链表的更新方法
  17. 图像分割—基于区域的图像分割
  18. (转)C#中两个问号和一个问号 ??
  19. Teamviewer使用方法
  20. 快递是否签收,分享小技巧查询物流查看已签收件

热门文章

  1. 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说
  2. 大连理工计算机类排名,中国理工类大学排名出炉,哈工大逆袭成黑马,大连理工无缘前5...
  3. Android存储权限
  4. 计算机中的加减法(二进制补码加减法)
  5. java 格式化输出 对齐_Java中中英文对齐输出问题,以及Java中的格式化输出
  6. 荣耀30鸿蒙体验,爆料:荣耀30 Pro开始测试华为鸿蒙HarmonyOS 2.0
  7. (C语言)八进制转换十进制
  8. python循环之for循环
  9. 利用JS来进行多张图片的压缩、预览、上传
  10. IT信息技术企业可以做哪些认证?