相机的针孔模型及其内参数,外参数的理解
2019.10.18 FesianXu

文章目录

    • @[toc]
  • 前言
  • 相机的针孔模型
  • 坐标系的改变
  • 考虑更多因素
  • 总结
  • 更新说明
  • Reference

前言

在相机成像过程中,我们经常会提到相机的内参数外参数,这些参数决定了一个相机的成像的效果,是后续一系列计算机视觉问题的基础中的基础,然而因为较为底层的原因,现在却比较少人关心它,笔者最近在学习一些底层的计算机视觉成像理论,感觉有所裨益,希望能在此进行笔记,作为备忘,如果能对读者有所帮助,则是更好不过了。如有谬误,请联系指正。转载请注明出处。

注意到本文全文采用齐次坐标系的表达方式,具体见[5]。

∇ \nabla ∇ 联系方式:

e-mail: FesianXu@gmail.com

QQ: 973926198

github: https://github.com/FesianXu

知乎专栏: 计算机视觉/计算机图形理论与应用

微信公众号


相机的针孔模型

为了简单地解释一个相机为什么能够成像,我们通常会引入相机的针孔模型(pinhole model)。如Fig 1.1所示,在针孔模型中,相机呈现的都是倒像,这点其实很好理解,因为光线都是直线传播的,因此物理世界的实体(entity)在相机中的像必然是倒过来的。这里,为了让光只能通过一束(因为只有一束才能确保实体到像的一对一关系,然而实际中不可能做到理想的情况。),我们通常假设这个针孔是无限小的,然而因为无限小的针孔不能透光,为了使得成像有着充足的光线,针孔又必须足够的大,这俩要求显然是个矛盾,因此一般我们需要在针孔处安置透镜,而透镜的引入,包括透镜的厚度,透光度等等不理想的因素,使得成像分析变得复杂起来,但是我们这里还是按照针孔模型的结构去理解,以简化分析。(透镜这里的作用是为了更好的聚集光线。)

Fig 1.1 相机的成像。

我们需要知道的是,理想的相机模型是不需要透镜的,因为没有透镜的引入,因此成像没有因透镜产生的几何变形和模糊。在这个模型中,我们其实是在描述从实体的3D坐标到成像平面的2D坐标之间的映射关系 X → x , X ∈ R 3 , x ∈ R 2 \mathbf{X} \rightarrow \mathbf{x}, \mathbf{X} \in \mathbb{R}^3, \mathbf{x} \in \mathbb{R}^2 X→x,X∈R3,x∈R2 (注:此处是维度表达是非齐次坐标)。如Fig 1.2所示,现实中的实体点 X X X坐标为 ( x , y , z ) (x,y,z) (x,y,z),其光线通过焦点 C C C聚集在成像平面上,但是这个像是倒像,不方便分析,为了方便,我们通常假设和倒像的成像平面对称的一端也有个成像平面,这个平面成像是正面的,其特性和真实的成像平面一模一样,除了呈现的是正像之外,因此我们正式地将其称为成像平面(image plane)。其真实实体的映射点坐标为 x = ( u , v ) x = (u,v) x=(u,v)。

Fig 1.2 相机的针孔模型。

这里,为了方便接下来的讨论,我们将定义和解释以下术语:

  1. 焦点(camera center, optic center): 所有光线都会聚集的点,比如Fig 1.2中的点C。
  2. 成像平面(image plane):相机的CCD平面,图像在这个平面上形成,注意后续讨论的image plane一般会是指的呈现正像的那个平面。
  3. 光轴(principal axis):经过焦点,并且与成像平面垂直的线。
  4. 光轴面(principal plane): 包含着焦点,并且和成像平面平行的面。
  5. 焦距(focal length): 通常表示为 f f f,指的是焦点到成像平面的距离。
  6. 帧(frame): 这里提到的帧和我们通常视频处理里面的帧不太一样,这里提到的帧指的是一种度量,用于衡量一个特定的坐标系系统。
  7. 世界坐标系(world frame, world coordinate system):一个固定的坐标系,用于表示现实实体的坐标(比如点线面等等)。
  8. 相机坐标系(camera frame, camera coordinate system):将相机的焦点作为其原点,光轴作为其Z轴的坐标系。
  9. 图像坐标系(image frame, image coordinate system):描述二维图像的像素位置,通常以图像的左上角或者图像的中心视为坐标原点。
  10. 外参数(extrinsic parameters): 外参数描述了如何将实体的3D点(以世界坐标系描述)映射到以相机坐标系描述的3D点上,显然,这个是坐标系的平移和旋转过程。
  11. 内参数(intrinsic parameters):内参数描述了如何将已经是用相机坐标系描述的3D点投射到成像平面上。
  12. 视网膜平面(image, retina plane):图像在这个平面上成像,注意到,图像平面用相机坐标系度量,其单位是mm,毫米,属于物理单位。
  13. 图像帧(image frame):这个帧和我们通常理解的帧一致,其用像素(pixel)去描述图像平面,而不是mm了,属于逻辑单位。(比如一个像素对应多少mm的距离是不同的。)
  14. 光心(principal point): 指的是光轴和成像平面的交点。

这里我们给出一个图取参数上面谈到的一些概念,注意到的是其中的virtual image plane其实是本文中谈到的成像平面。[1]

Fig 1.3 相机针孔成像过程及其术语解析。

坐标系的改变

为了将一个在世界坐标系中表示的点,以相机坐标系的形式进行表达,我们需要进行坐标系的平移和旋转变化(即是欧几里德变换[4])。比如Fig 2.1所示,我们需要通过平移和旋转将 X W T = ( X W , Y W , Z W , 1 ) \mathbf{X}_{W}^{\mathrm{T}} = (X_W, Y_W, Z_W, 1) XWT​=(XW​,YW​,ZW​,1)转换到 X C T = ( X C , Y C , Z C , 1 ) \mathbf{X}_{C}^{\mathrm{T}} = (X_C,Y_C,Z_C,1) XCT​=(XC​,YC​,ZC​,1),容易知道,在不同坐标系中,对于同一个实体点 P P P来说,其表达形式都不同。我们接下来考虑怎么进行这个坐标系转换。

Fig 2.1 世界坐标系 到 相机坐标系的转换过程。

通常来说,这个过程可以简单表示为,平移向量和旋转矩阵的操作,如:
X C = R ( X W − C ) (2.1) \mathbf{X}_C = \mathbf{R}(\mathbf{X}_W-C) \tag{2.1} XC​=R(XW​−C)(2.1)
其中, X W = ( X W , Y W , Z W , 1 ) T \mathbf{X}_{W} = (X_W,Y_W,Z_W,1)^{\mathrm{T}} XW​=(XW​,YW​,ZW​,1)T是世界坐标系坐标, X C = ( X C , Y C , Z C , 1 ) T \mathbf{X}_C = (X_C, Y_C, Z_C,1)^{\mathrm{T}} XC​=(XC​,YC​,ZC​,1)T是相机坐标系坐标, R ∈ R 4 × 4 \mathbf{R} \in \mathbb{R}^{4 \times 4} R∈R4×4是旋转矩阵(注意这里是齐次坐标系的表达方法,见[5]), C = ( X 0 , Y 0 , Z 0 , 1 ) T C = (X_0, Y_0, Z_0,1)^{\mathrm{T}} C=(X0​,Y0​,Z0​,1)T是用世界坐标系描述的焦点。通过式子(2.1)我们实现了世界坐标系到相机坐标系的变换 X W → X C \mathbf{X}_{W} \rightarrow \mathbf{X}_{C} XW​→XC​,不过注意到这里还停留在三维点之间的欧几里德变换。

在以上的讨论中,我们把坐标从世界坐标系转换成了相机坐标系,但是我们通常是需要用图像坐标系去表示图片中的某个像素点的,这里涉及到了三维点到二维点的映射问题,因此我们还需要进行 相机坐标系到图像坐标系的转换,即是 X C → x \mathbf{X}_{C} \rightarrow \mathbf{x} XC​→x。

我们考虑到在中心投影中,如Fig 2.2中,我们根据相似三角形的规律有,其中以相机坐标系描述的点 X C \mathbf{X}_C XC​投影到成像平面上有 x = ( x c , y c ) T \mathbf{x} = (x_c, y_c)^{\mathrm{T}} x=(xc​,yc​)T
x c = f X c Z c y c = f Y c Z c (2.2) \begin{aligned} x_c &= \frac{f X_c}{Z_c} \\ y_c &= \frac{f Y_c}{Z_c} \end{aligned} \tag{2.2} xc​yc​​=Zc​fXc​​=Zc​fYc​​​(2.2)

Fig 2.2 中心投影,符合相似三角形的比例关系。

用矩阵形式表达就是:
x C = [ f 0 0 0 0 f 0 0 0 0 1 0 ] X C , X C ∈ R 4 × 1 (2.3) \mathbf{x}_C = \left[ \begin{matrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{matrix} \right] \mathbf{X}_{C}, \mathbf{X}_C \in \mathbb{R}^{4 \times 1} \tag{2.3} xC​=⎣⎡​f00​0f0​001​000​⎦⎤​XC​,XC​∈R4×1(2.3)
可知此时有: x C = ( f X C , f Y C , Z C ) T \mathbf{x}_C = (f X_C, f Y_C, Z_C)^{\mathrm{T}} xC​=(fXC​,fYC​,ZC​)T,其是用齐次坐标系表达的,等价于非齐次形式的 x C = ( f X C / Z c , f Y C / Z c ) T \mathbf{x}_C = (fX_C/Z_c, f Y_C/Z_c)^{\mathrm{T}} xC​=(fXC​/Zc​,fYC​/Zc​)T。

考虑到公式(2.1)和(2.3),我们能够把一个3D点映射成2D点:
x C = [ f 0 0 0 0 f 0 0 0 0 1 0 ] X C = [ f 0 0 0 0 f 0 0 0 0 1 0 ] R [ I ∣ − C ] X W (2.4) \begin{aligned} \mathbf{x}_C &= \left[ \begin{matrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{matrix} \right] \mathbf{X}_C = \left[ \begin{matrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{matrix} \right] \mathbf{R} [\mathbf{I} | -\mathbf{C}] {\mathbf{X}}_W \end{aligned} \tag{2.4} xC​​=⎣⎡​f00​0f0​001​000​⎦⎤​XC​=⎣⎡​f00​0f0​001​000​⎦⎤​R[I∣−C]XW​​(2.4)
这里的 R [ I ∣ − C ] \mathbf{R} [\mathbf{I} | -\mathbf{C}] R[I∣−C]称之为外参数(extrinsic parameters),这些参数描述了如何将世界坐标系的实体3D点转换到以相机坐标系描述的3D点。而前面乘上的形状为 3 × 4 3 \times 4 3×4的矩阵是投影矩阵,负责从相机坐标系的三维点映射到二维上,当然这个形式并不完整,我们接下来会继续探讨这一部分,我们要继续考虑相机成像过程中的工艺导致的问题修正。

那么总结来说,其实对于坐标系的平移和旋转,我们可以用下面的几副图来表示:

首先,我们有两个不同的坐标系,左边的世界坐标系(X,Y,Z)和右边的相机坐标系(u,v,w)

然后,我们通过将两者的原点O和C以平移的方式挪到一起,我们通过平移矩阵T去实现。

最后,利用旋转矩阵,将其进行坐标轴的旋转和对齐即可。

考虑更多因素

注意到通过上面的讨论,我们转换得到的二维像点 x C \mathbf{x}_C xC​的单位仍然是物理单位mm,如果我们需要用像素去度量(实际上也是用像素度量的),我们仍需要进行其他处理。(内参数的协助) x C \mathbf{x}_C xC​在这里是以光心作为其原点的,而传统的表示中,我们一般以左上角的作为原点进行描述。因为一些制造工艺上的不精确性,我们的成像传感器CCD通常不是完美的矩形网格,可能会有变形。比如偏斜(skewness)用于描述CCD单元的变形程度,见Fig 2.3。

Fig 2.3 CCD单元的偏斜。

那么经过矫正,其正确的坐标应该是:
x = x ′ − y ′ cot ⁡ ( θ ) y = y ′ sin ⁡ ( θ ) (2.5) \begin{aligned} x &= x^{\prime}-y^{\prime}\cot(\theta) \\ y &= \dfrac{y^{\prime}}{\sin(\theta)} \end{aligned} \tag{2.5} xy​=x′−y′cot(θ)=sin(θ)y′​​(2.5)
考虑到CCD的偏斜,和物理单位到像素单位的转变,我们有以下公式:
x = [ m x 0 x 0 0 m y y 0 0 0 1 ] [ 1 − cot ⁡ ( θ ) 0 0 1 sin ⁡ ( θ ) 0 0 0 1 ] x C = [ m x 0 x 0 0 m y y 0 0 0 1 ] [ 1 − cot ⁡ ( θ ) 0 0 1 sin ⁡ ( θ ) 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] R [ I ∣ − C ] X W = [ m x f − m x f cot ⁡ ( θ ) x 0 0 0 m y f sin ⁡ ( θ ) y 0 0 0 0 1 0 ] R [ I ∣ − C ] X W = [ α x s x 0 0 0 α y y 0 0 0 0 1 0 ] R [ I ∣ − C ] X W = K R [ I ∣ − C ] X W = P X W (2.6) \begin{aligned} \mathbf{x} &= \left[ \begin{matrix} m_x & 0 & x_0 \\ 0 & m_y & y_0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} 1 & -\cot(\theta) & 0 \\ 0 & \dfrac{1}{\sin(\theta)} & 0 \\ 0 & 0 & 1 \end{matrix} \right] \mathbf{x}_C \\ &= \left[ \begin{matrix} m_x & 0 & x_0 \\ 0 & m_y & y_0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} 1 & -\cot(\theta) & 0 \\ 0 & \dfrac{1}{\sin(\theta)} & 0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{matrix} \right] \mathbf{R}[\mathbf{I}|-\mathbf{C}] \mathbf{X}_W \\ &= \left[ \begin{matrix} m_x f & -m_x f \cot(\theta) & x_0 & 0\\ 0 & \dfrac{m_y f}{\sin(\theta)} & y_0 & 0\\ 0 & 0 & 1 & 0 \end{matrix} \right] \mathbf{R}[\mathbf{I}|-\mathbf{C}] \mathbf{X}_W \\ &= \left[ \begin{matrix} \alpha_x & s & x_0 & 0\\ 0 & \alpha_y & y_0 & 0\\ 0 & 0 & 1 & 0 \end{matrix} \right] \mathbf{R}[\mathbf{I}|-\mathbf{C}] \mathbf{X}_W \\ &= \mathbf{K} \mathbf{R}[\mathbf{I}|-\mathbf{C}] \mathbf{X}_W \\ &= \mathbf{P} \mathbf{X}_W \\ \end{aligned} \tag{2.6} x​=⎣⎡​mx​00​0my​0​x0​y0​1​⎦⎤​⎣⎢⎡​100​−cot(θ)sin(θ)1​0​001​⎦⎥⎤​xC​=⎣⎡​mx​00​0my​0​x0​y0​1​⎦⎤​⎣⎢⎡​100​−cot(θ)sin(θ)1​0​001​⎦⎥⎤​⎣⎡​f00​0f0​001​000​⎦⎤​R[I∣−C]XW​=⎣⎢⎢⎡​mx​f00​−mx​fcot(θ)sin(θ)my​f​0​x0​y0​1​000​⎦⎥⎥⎤​R[I∣−C]XW​=⎣⎡​αx​00​sαy​0​x0​y0​1​000​⎦⎤​R[I∣−C]XW​=KR[I∣−C]XW​=PXW​​(2.6)

其中有 X W ∈ R 4 × 1 , K ∈ R 3 × 4 , P ∈ R 3 × 4 \mathbf{X}_W \in \mathbb{R}^{4 \times 1}, \mathbf{K} \in \mathbb{R}^{3 \times 4}, \mathbf{P} \in \mathbb{R}^{3 \times 4} XW​∈R4×1,K∈R3×4,P∈R3×4。在这个公式(2.6)中,我们发现有很多陌生的符号,其中我们将:
[ m x 0 x 0 0 0 m y y 0 0 0 0 1 0 ] 和 [ 1 − cot ⁡ ( θ ) 0 0 1 sin ⁡ ( θ ) 0 0 0 1 ] 和 [ f 0 0 0 0 f 0 0 0 0 1 0 ] \left[ \begin{matrix} m_x & 0 & x_0 & 0\\ 0 & m_y & y_0 & 0\\ 0 & 0 & 1 & 0 \end{matrix} \right] 和 \left[ \begin{matrix} 1 & -\cot(\theta) & 0 \\ 0 & \dfrac{1}{\sin(\theta)} & 0 \\ 0 & 0 & 1 \end{matrix} \right] 和 \left[ \begin{matrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{matrix} \right] ⎣⎡​mx​00​0my​0​x0​y0​1​000​⎦⎤​和⎣⎢⎡​100​−cot(θ)sin(θ)1​0​001​⎦⎥⎤​和⎣⎡​f00​0f0​001​000​⎦⎤​
中的参数称之为内参数(intrinsic parameters),我们这里讨论下这些参数:

  1. m x m_x mx​和 m y m_y my​是在x轴和y轴(指的是有偏斜过后的),每个单位长度的像素数量。通过这俩参数可以将物理单位mm转换为像素。
  2. f f f 是相机的焦距。
  3. x 0 x_0 x0​和 y 0 y_0 y0​是在偏斜的图像帧中的光心(以像素为单位)。
  4. s s s是偏斜系数(skewness factor),当像素是矩形的时候其为0。
  5. θ \theta θ是两个图像SSD平面边缘之间的偏斜角度,见Fig 2.3。

这三个内参数矩阵可以合为一个矩阵 K \mathbf{K} K,通过这个矩阵,我们可以将用相机坐标系表示的3D点映射到成像平面上,从而得到我们目标需要的2D点。


总结

在这篇博文中,我们讨论了相机的针孔模型,其中涉及到了相机的内参数和外参数等,我们将会在以后的文章中发现,这些参数对于相机的呈像是很重要的,因此需要去通过相机标定(camera calibration)去计算这些参数。

更新说明

Update 2020/9/5: 感谢评论区的Zeroan_朋友提供的意见,之前版本的文章没有统一坐标系的表达方式,容易造成误解,现在已经统一成齐次坐标系,齐次坐标系内容可见[5]。

Update 2020/11/5
评论区有个朋友的问题

ID->curryche:请问一下博主,R[I|-C]这个是怎么得出的?看不懂,,

在这里回答一下,注意到式子(2.1),其实 R [ I ∣ − C ] \mathbf{R}[\mathbf{I} | \mathbf{-C}] R[I∣−C]只是对式子(2.1)的改写而已,式子(2.1)中的旋转矩阵以齐次坐标形式表达,为 R ∈ R 4 × 4 \mathbf{R} \in \mathbb{R}^{4 \times 4} R∈R4×4,而 ( X W − C ) ∈ R 4 × 1 (\mathbf{X}_W-\mathbf{C}) \in \mathbf{R}^{4 \times 1} (XW​−C)∈R4×1,这点不难理解,提取公因子之后有:
R [ 1 0 0 X C 0 1 0 Y C 0 0 1 Z C 0 0 0 1 ] X W (a1) \mathbf{R} \left[ \begin{matrix} 1 & 0 & 0 & X_C \\ 0 & 1 & 0 & Y_C \\ 0 & 0 & 1 & Z_C \\ 0 & 0 & 0 & 1 \end{matrix} \right] \mathbf{X}_W \tag{a1} R⎣⎢⎢⎡​1000​0100​0010​XC​YC​ZC​1​⎦⎥⎥⎤​XW​(a1)
因此可以写成 R [ I ∣ − C ] \mathbf{R}[\mathbf{I} | \mathbf{-C}] R[I∣−C]。


Reference

[1]. https://jp.mathworks.com/help/vision/ug/camera-calibration.html

[2]. Forsyth D , JeanPonce, 福赛斯, et al. Computer vision : a modern approach[M]. 电子工业出版社, 2012.

[3]. 电子科技大学自动化学院 杨路 老师 计算机视觉课程课件。

[4]. https://blog.csdn.net/LoseInVain/article/details/104533575

[5]. https://blog.csdn.net/LoseInVain/article/details/102756630

相机的针孔模型及其内参数,外参数的理解相关推荐

  1. 相机的基本模型和参数

    前言 "相机就是计算机的眼睛." -- 哲学砖家阿瓦里斯基 好吧是我说的 这句话其实仅代表的是我的观点,相机之于计算机正如眼睛之于人,人眼就可以看成两台精密的相机.不过,不同于人眼 ...

  2. 相机模型(内参数,外参数)

    相机成像的过程实际是将真实的三维空间中的三维点映射到成像平面(二维空间)过程,可以简单的使用小孔成像模型来描述该过程,以了解成像过程中三维空间到二位图像空间的变换过程. 本文包含两部分内容,首先介绍小 ...

  3. 使用Kalibr标定相机和IMU(ZED+px4)外参

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 使用Kalibr标定相机和IMU(ZED+px4)外参 前言 一.Kalibr介绍 二.CAM-IMU外参标定 1.相机内参 2.IM ...

  4. 机器视觉-相机内参数和外参数

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 1.相机内参数是与相机自身特性相关的参数,比如相机的焦距.像素大小 ...

  5. 计算机视觉-相机内参数和外参数

    1.相机内参数是与相机自身特性相关的参数,比如相机的焦距.像素大小等: 相机外参数是在世界坐标系中的参数,比如相机的位置.旋转方向等. 相机标定(或摄像机标定): 一句话就是世界坐标到像素坐标的映射, ...

  6. matlab相机标定 外参数,相机外参数的标定.doc

    相机外参数的标定 本 科 毕 业 设 计 (论 文) 题 目 __________________________________ 指导教师__________________________ 辅导教 ...

  7. 18.外部相机校准——刚体变换,变换和旋转,外参数矩阵 测验_3

    目录 刚体变换 平移和旋转 外参数矩阵 测验 总结 刚体变换 现在,我们可以做全刚性变换(total rigid transformations).所以全刚性变换,因此,如果我在A系统中有一些点(如图 ...

  8. [计算机视觉] (三)相机的针孔成像模型

    目录 1 概述 2 归一化成像平面坐标系和相机坐标系的转换 3 归一化成像平面坐标系和物理成像坐标系的转换 4 世界坐标系和相机坐标系的转换 4.1 刚体运动 4.2 坐标系转换(坐标映射) 4.3 ...

  9. Kalibr 标定双目内外参数以及 IMU 外参数

    本文记录使用 Kalibr 标定双目相机内外参数以及和IMU之间外参数的标定过程. 采用的硬件设备为小觅的双目VIO设备( MyntEYE), 并且默认你已经有了ROS的知识基础. 标定 stereo ...

最新文章

  1. js mysql替换_JavaScript_js使用正则实现ReplaceAll全部替换的方法,JS 字符串有replace() 方法。但这 - phpStudy...
  2. 登录环境故障的原理及解决办法? -bash-4.1$ -bash-4.1$
  3. 作业收缴系统使用手册(自写开源小系统)
  4. C语言中时间的基本用法
  5. python二分法排序_python实现快速排序的示例(二分法思想)
  6. epson彩色打印机加墨水_爱普生打印机墨盒如何加墨?
  7. Lyft出售自动驾驶部门给丰田子公司:作价5.5亿美元
  8. Java 线程池的实现原理,你真的理解吗?
  9. java ftp连接成功 上传失败_ftp自动上传工具,如何设置及配置ftp自动上传工具
  10. matlab 实验七 低层绘图操作,matlab实验内容解答.doc
  11. 无缓冲I/O与有缓冲I/O区别
  12. Struts框架实战精讲 struts1(5)- 动态ActionForm
  13. js实现公历(阳历)和农历(阴历)的换算
  14. 头歌-软件测试技术-面向对象测试_王铁军
  15. [02/Dec/2019:12:59:10 +0800]之日期转换
  16. 急需大量网银和电子商务经验人才
  17. HDU-5514 Frogs (容斥)
  18. python xlrd获取excel行数_Python 使用xlrd库读取excel,获取最大行和最大列等
  19. Managed DirectX中的DirectShow应用(简单Demo及源码)
  20. 切比雪夫不等式的证明

热门文章

  1. 手机验证码接收系统如何选择
  2. Matlab的plot函数画线显示空白问题解决
  3. 英语单词词根词缀和词性转换
  4. 纯css制作遮罩层特效
  5. allegro制作通孔焊盘封装-flash热风焊盘-图文并茂的Allegro 通孔焊盘制作教程
  6. es 聚合查询 java api_javaAPI操作ES分组聚合
  7. 【巨杉数据库SequoiaDB】影像平台分布式最佳实践 内容管理平台分布式实践
  8. 中望3D 2022 基准平面
  9. php 给视频添加水印,记php调用ffmpeg给视频加文字水印
  10. 华为正式发布鸿蒙发布会视频,鸿蒙手机要来了!华为正式发布HarmonyOS 2.0手机开发者Beta版...