简介

摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 P 的过程,下面相关的部分主要参考UIUC的计算机视觉的课件(网址Spring
2016 CS543 / ECE549 Computer vision
)。

基本的坐标系:

  • 世界坐标系(world coordinate system);
  • 相机坐标系(camera coordinate system);
  • 图像坐标系(image coordinate system);

一般来说,标定的过程分为两个部分:

  • 第一步是从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括 R,t (相机外参)等参数;
  • 第二部是从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括 K(相机内参)等参数;

相机坐标系 转换到 图像坐标系

坐标系介绍

如上图所示(图片来自UIUC计算机视觉课件),是一个小孔成像的模型,其中:

  • C 点表示camera
    centre
    ,即相机的中心点,也是相机坐标系的中心点;
  • Z 轴表示principal
    axis
    ,即相机的主轴;
  • p 点所在的平面表示image
    plane
    ,即相机的像平面,也就是图片坐标系所在的二维平面;
  • p 点表示principal
    point
    ,即主点,主轴与像平面相交的点;
  • C 点到 p 点的距离,也就是右边图中的 f 表示focal
    length
    ,即相机的焦距;
  • 像平面上的 x 和 y 坐标轴是与相机坐标系上的 X 和 Y 坐标轴互相平行的;
  • 相机坐标系是以 X, Y, Z(大写)三个轴组成的且原点在 C 点,度量值为米(m);
  • 像平面坐标系是以 x,y(小写)两个轴组成的且原点在 p 点,度量值为米(m);
  • 图像坐标系一般指图片相对坐标系,在这里可以认为和像平面坐标系在一个平面上,不过原点是在图片的角上,而且度量值为像素的个数(pixel);

相机 转换到 像平面

知道上面的简单知识后,如果知道相机坐标系中的一个点 X(现实三维世界中的点),在像平面坐标系对应的点是 x,要求求从相机坐标系转为像平面坐标系的转换,也就是从 X 点的(X,Y,Z)通过一定的转换变为 x 点的(x,y)。注意:(X,Y,Z)(大写)是在相机坐标系,而(x,y)(小写)是在像平面坐标系(还不是图像坐标系,原点不同。)观察第二个图,很简单的可以得到这个转换:

x=fX/Z
y=fY/Z
(X,Y,Z)↦(fX/Z,fY/Z)

可以表示为矩阵计算为(在这里用的是齐次坐标的表示方式,关于齐次坐标文章最下面有介绍):

⎛⎝⎜⎜⎜XYZ1⎞⎠⎟⎟⎟↦⎛⎝⎜fXfYZ⎞⎠⎟=⎡⎣⎢ff1000⎤⎦⎥⎛⎝⎜⎜⎜XYZ1⎞⎠⎟⎟⎟

可以简写为(P 就是所谓的投影矩阵,当然现在还不完整):

x=PX

加入偏移量

通过上面,可以把相机坐标系转换到像平面坐标系,但是像平面坐标系和图像坐标系虽然在同一个平面上,但是原点并不是同一个,而目标是要转换到图像坐标系下,所以还需要一步操作,如下图:

如上图所示(图片来自UIUC计算机视觉课件),其中主点 p 是像平面坐标系的原点,但在图像坐标系中的位置为(px,py),在这里,图形坐标系的原点是图片的左下角,所以可以得到:

(X,Y,Z)↦(fX/Z+px,fY/Z+py)

相当于在上面的基础上加了一个p点坐标的偏移量,同时可以表示为矩阵计算为(在这里用的是齐次坐标的表示方式):

⎛⎝⎜⎜⎜XYZ1⎞⎠⎟⎟⎟↦⎛⎝⎜fX+ZpxfY+ZpyZ⎞⎠⎟=⎡⎣⎢ffpxpy1000⎤⎦⎥⎛⎝⎜⎜⎜XYZ1⎞⎠⎟⎟⎟

整理一下得:

⎛⎝⎜fX+ZpxfY+ZpyZ⎞⎠⎟=⎡⎣⎢ffpxpy1⎤⎦⎥⎡⎣⎢111000⎤⎦⎥⎛⎝⎜⎜⎜XYZ1⎞⎠⎟⎟⎟

所以最后可以得到 K,也就是平时所说的相机内参(Intrinsic
parameters
):

K=⎡⎣⎢ffpxpy1⎤⎦⎥

以及投影矩阵 P(在这里可以认为旋转矩阵 R 为单位矩阵 I,平移矩阵 t 都为0,这也是为什么要拆成这种方式),为:

P=K[I0]

像素坐标

前面也提到了在图像坐标系中用的不是现实生活中的m来度量,而是用的 pixel 的个数,所以在上面转换到图像坐标系中还有个问题,就是坐标的表示还是m,并没有转换到像素坐标系统;在这里需要引入一个新概念就是:

  • mx 表示在水平方向1m的长度包含的像素的个数;
  • my 表示在竖直方向1m的长度包含的像素的个数;

可能有人奇怪为啥不是一个值,还需要分别指定 mx 和 my 呀,这是因为通过上面可以得到一个像素点的大小(m度量)为:

1mx×1my

但是需要说明的是像素并不一定是一个正方形,有时候可能也是一个矩形,所以要分别指定。 

所以可以把上面相机内参 K 变为更新为,转换公式把 K 替换即可,其他不变:

K=⎡⎣⎢mxmy1⎤⎦⎥⎡⎣⎢ffpxpy1⎤⎦⎥=⎡⎣⎢αxαyβxβy1⎤⎦⎥

一般来说,在使用相机内参K计算坐标系转换时,提供的都是已经变换后的值;例如会提供 fx,fy ,cx,cy 四个值代表相机内参K,其实 fx 就是这里的 αx,同理 fy 是 αy,cx 是 βx,cy 是 βy。

世界坐标系 转换到 图像坐标系

坐标系介绍

如上图所示(图片来自UIUC计算机视觉课件),从世界坐标系转换到相机坐标系是三维空间到三维空间的变换,一般来说需要一个平移操作和一个旋转操作就可以完成这个转换,用公式表示如下(可以理解为世界坐标系原点先平移到相机坐标系的位置然后在做一次坐标系旋转,使坐标轴对齐。):

X˜cam=R(X˜−C˜)
  • R 表示旋转矩阵;
  • X˜ 表示 X 点在世界坐标系中的位置;
  • C˜ 表示相机原点 C 在世界坐标系中的位置;
  • X˜cam 表示 X 点在相机坐标系中的位置;

世界 转换到 相机

根据上面的公式可以得到从一个三维点从世界坐标系转换到相机坐标的变换公式如下(也是用的齐次坐标的表示方式):

Xcam=(X˜cam1)=[R0−RC˜1](X˜1)=[R0−RC˜1]X

世界 转换到 图像

根据上面的讨论知道了怎样从世界坐标系转换到相机坐标系(平移和旋转)以及从相机坐标系转换到图像坐标系(相机内参变换),所以带入上面的矩阵计算,可以得到:

x=K[I0]Xcam=K[R−RC˜]X

这样就得到了最终的投影矩阵 P :

P=K[Rt]

其中:

t=−RC˜

在这里,K 一般称为相机内参(intrinsic
parameters
),描述了相机的内部参数,包括焦距 f、主点 p的位置、以及像素与真实环境的大小比例等,这个是固有属性,是提供好的;R 和 t 称为相机外参(extrinsic
parameters
),R 在这里是旋转矩阵,可以转换为三维的旋转向量,分别表示绕x,y,z 三个轴的旋转角度,t 目前就是一个平移向量,分别表示在x,y,z 三个方向上的平移量。

畸变参数(distortion parameters)

在几何光学和阴极射线管(CRT)显示中,畸变(distortion) 是对直线投影(rectilinear
projection
)的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。那畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration)。可能由于摄像机镜头的原因,这里不讨论,有兴趣的可以查阅光学畸变的相关的资料。 

畸变一般可以分为两大类,包括径向畸变和切向畸变。主要的一般径向畸变有时也会有轻微的切向畸变。

径向畸变(Radial distortion

径向畸变的效应有三种,一种是桶形畸变(barrel distortion),另一种是枕形畸变(pincushion
distortion
),还有一种是两种的结合叫做胡子畸变(mustache distortion),从图片中可以很容易看出区别,具体见下图(图片来自wikipedia):

径向畸变可以用如下公式修正:

xcorr=xdis(1+k1r2+k2r4+k3r6)
ycorr=ydis(1+k1r2+k2r4+k3r6)

切向畸变(tangential distortion

切向畸变是由于透镜与成像平面不严格的平行,其可以用如下公式修正:

xcorr=xdis+[2p1xy+p2(r2+2x2)]
ycorr=ydis+[p1(r2+2y2)+2p2xy]

其中:

  • xdis 和 ydis 表示有畸变的坐标;
  • xcorr 和 ycorr 表示修复后的坐标;
  • k1,k2,k3 表示径向畸变参数;
  • p1,p2 表示切向畸变参数;

所以最终得到5个畸变参数:

D=(k1,k2,p1,p2,k3)

相机标定

那么可以利用这些来进行最终的任务相机标定,简单的过程可以描述为通过标定板,如下图,可以得到n个对应的世界坐标三维点 Xi 和对应的图像坐标二维点 xi,这些三维点到二维点的转换都可以通过上面提到的相机内参 K,相机外参 R 和 t,以及畸变参数 D 经过一系列的矩阵变换得到。现在就用这些对应关系来求解这些相机参数。最后就是用线性方法求解方程式,这里就不做讨论了。

那为什么要做相机标定呢? 

每个镜头的畸变程度各不相同,通过相机标定可以校正这种镜头畸变。其实可以认为用这种标定的方式来求解相机内参和畸变参数,相当于一种相机校准,然后这些参数就可以用于后面的求解。例如求解新拍的两幅图片相对的 R 和 t,求解这个外参用到就是标定得到的相机内参和畸变参数。

齐次坐标 

就是将一个原本是n维的向量用一个n+1维向量来表示。 

许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来可以表示为 x=R∗X+t(注:因为习惯的原因,实际使用时一般使用变化矩阵左乘向量)(R 旋转缩放矩阵,t 为平移矩阵,X 为原向量,x为变换后的向量)。引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为 x=P∗X的形式。即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。和上面的计算过程是对应的。

简介

摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 P 的过程,下面相关的部分主要参考UIUC的计算机视觉的课件(网址Spring
2016 CS543 / ECE549 Computer vision
)。

基本的坐标系:

  • 世界坐标系(world coordinate system);
  • 相机坐标系(camera coordinate system);
  • 图像坐标系(image coordinate system);

一般来说,标定的过程分为两个部分:

  • 第一步是从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括 R,t (相机外参)等参数;
  • 第二部是从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括 K(相机内参)等参数;

相机坐标系 转换到 图像坐标系

坐标系介绍

如上图所示(图片来自UIUC计算机视觉课件),是一个小孔成像的模型,其中:

  • C 点表示camera
    centre
    ,即相机的中心点,也是相机坐标系的中心点;
  • Z 轴表示principal
    axis
    ,即相机的主轴;
  • p 点所在的平面表示image
    plane
    ,即相机的像平面,也就是图片坐标系所在的二维平面;
  • p 点表示principal
    point
    ,即主点,主轴与像平面相交的点;
  • C 点到 p 点的距离,也就是右边图中的 f 表示focal
    length
    ,即相机的焦距;
  • 像平面上的 x 和 y 坐标轴是与相机坐标系上的 X 和 Y 坐标轴互相平行的;
  • 相机坐标系是以 X, Y, Z(大写)三个轴组成的且原点在 C 点,度量值为米(m);
  • 像平面坐标系是以 x,y(小写)两个轴组成的且原点在 p 点,度量值为米(m);
  • 图像坐标系一般指图片相对坐标系,在这里可以认为和像平面坐标系在一个平面上,不过原点是在图片的角上,而且度量值为像素的个数(pixel);

相机 转换到 像平面

知道上面的简单知识后,如果知道相机坐标系中的一个点 X(现实三维世界中的点),在像平面坐标系对应的点是 x,要求求从相机坐标系转为像平面坐标系的转换,也就是从 X 点的(X,Y,Z)通过一定的转换变为 x 点的(x,y)。注意:(X,Y,Z)(大写)是在相机坐标系,而(x,y)(小写)是在像平面坐标系(还不是图像坐标系,原点不同。)观察第二个图,很简单的可以得到这个转换:

x=fX/Z
y=fY/Z
(X,Y,Z)↦(fX/Z,fY/Z)

可以表示为矩阵计算为(在这里用的是齐次坐标的表示方式,关于齐次坐标文章最下面有介绍):

⎛⎝⎜⎜⎜XYZ1⎞⎠⎟⎟⎟↦⎛⎝⎜fXfYZ⎞⎠⎟=⎡⎣⎢ff1000⎤⎦⎥⎛⎝⎜⎜⎜XYZ1⎞⎠⎟⎟⎟

可以简写为(P 就是所谓的投影矩阵,当然现在还不完整):

x=PX

加入偏移量

通过上面,可以把相机坐标系转换到像平面坐标系,但是像平面坐标系和图像坐标系虽然在同一个平面上,但是原点并不是同一个,而目标是要转换到图像坐标系下,所以还需要一步操作,如下图:

如上图所示(图片来自UIUC计算机视觉课件),其中主点 p 是像平面坐标系的原点,但在图像坐标系中的位置为(px,py),在这里,图形坐标系的原点是图片的左下角,所以可以得到:

(X,Y,Z)↦(fX/Z+px,fY/Z+py)

相当于在上面的基础上加了一个p点坐标的偏移量,同时可以表示为矩阵计算为(在这里用的是齐次坐标的表示方式):

⎛⎝⎜⎜⎜XYZ1⎞⎠⎟⎟⎟↦⎛⎝⎜fX+ZpxfY+ZpyZ⎞⎠⎟=⎡⎣⎢ffpxpy1000⎤⎦⎥⎛⎝⎜⎜⎜XYZ1⎞⎠⎟⎟⎟

整理一下得:

⎛⎝⎜fX+ZpxfY+ZpyZ⎞⎠⎟=⎡⎣⎢ffpxpy1⎤⎦⎥⎡⎣⎢111000⎤⎦⎥⎛⎝⎜⎜⎜XYZ1⎞⎠⎟⎟⎟

所以最后可以得到 K,也就是平时所说的相机内参(Intrinsic
parameters
):

K=⎡⎣⎢ffpxpy1⎤⎦⎥

以及投影矩阵 P(在这里可以认为旋转矩阵 R 为单位矩阵 I,平移矩阵 t 都为0,这也是为什么要拆成这种方式),为:

P=K[I0]

像素坐标

前面也提到了在图像坐标系中用的不是现实生活中的m来度量,而是用的 pixel 的个数,所以在上面转换到图像坐标系中还有个问题,就是坐标的表示还是m,并没有转换到像素坐标系统;在这里需要引入一个新概念就是:

  • mx 表示在水平方向1m的长度包含的像素的个数;
  • my 表示在竖直方向1m的长度包含的像素的个数;

可能有人奇怪为啥不是一个值,还需要分别指定 mx 和 my 呀,这是因为通过上面可以得到一个像素点的大小(m度量)为:

1mx×1my

但是需要说明的是像素并不一定是一个正方形,有时候可能也是一个矩形,所以要分别指定。 

所以可以把上面相机内参 K 变为更新为,转换公式把 K 替换即可,其他不变:

K=⎡⎣⎢mxmy1⎤⎦⎥⎡⎣⎢ffpxpy1⎤⎦⎥=⎡⎣⎢αxαyβxβy1⎤⎦⎥

一般来说,在使用相机内参K计算坐标系转换时,提供的都是已经变换后的值;例如会提供 fx,fy ,cx,cy 四个值代表相机内参K,其实 fx 就是这里的 αx,同理 fy 是 αy,cx 是 βx,cy 是 βy。

世界坐标系 转换到 图像坐标系

坐标系介绍

如上图所示(图片来自UIUC计算机视觉课件),从世界坐标系转换到相机坐标系是三维空间到三维空间的变换,一般来说需要一个平移操作和一个旋转操作就可以完成这个转换,用公式表示如下(可以理解为世界坐标系原点先平移到相机坐标系的位置然后在做一次坐标系旋转,使坐标轴对齐。):

X˜cam=R(X˜−C˜)
  • R 表示旋转矩阵;
  • X˜ 表示 X 点在世界坐标系中的位置;
  • C˜ 表示相机原点 C 在世界坐标系中的位置;
  • X˜cam 表示 X 点在相机坐标系中的位置;

世界 转换到 相机

根据上面的公式可以得到从一个三维点从世界坐标系转换到相机坐标的变换公式如下(也是用的齐次坐标的表示方式):

Xcam=(X˜cam1)=[R0−RC˜1](X˜1)=[R0−RC˜1]X

世界 转换到 图像

根据上面的讨论知道了怎样从世界坐标系转换到相机坐标系(平移和旋转)以及从相机坐标系转换到图像坐标系(相机内参变换),所以带入上面的矩阵计算,可以得到:

x=K[I0]Xcam=K[R−RC˜]X

这样就得到了最终的投影矩阵 P :

P=K[Rt]

其中:

t=−RC˜

在这里,K 一般称为相机内参(intrinsic
parameters
),描述了相机的内部参数,包括焦距 f、主点 p的位置、以及像素与真实环境的大小比例等,这个是固有属性,是提供好的;R 和 t 称为相机外参(extrinsic
parameters
),R 在这里是旋转矩阵,可以转换为三维的旋转向量,分别表示绕x,y,z 三个轴的旋转角度,t 目前就是一个平移向量,分别表示在x,y,z 三个方向上的平移量。

畸变参数(distortion parameters)

在几何光学和阴极射线管(CRT)显示中,畸变(distortion) 是对直线投影(rectilinear
projection
)的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。那畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration)。可能由于摄像机镜头的原因,这里不讨论,有兴趣的可以查阅光学畸变的相关的资料。 

畸变一般可以分为两大类,包括径向畸变和切向畸变。主要的一般径向畸变有时也会有轻微的切向畸变。

径向畸变(Radial distortion

径向畸变的效应有三种,一种是桶形畸变(barrel distortion),另一种是枕形畸变(pincushion
distortion
),还有一种是两种的结合叫做胡子畸变(mustache distortion),从图片中可以很容易看出区别,具体见下图(图片来自wikipedia):

径向畸变可以用如下公式修正:

xcorr=xdis(1+k1r2+k2r4+k3r6)
ycorr=ydis(1+k1r2+k2r4+k3r6)

切向畸变(tangential distortion

切向畸变是由于透镜与成像平面不严格的平行,其可以用如下公式修正:

xcorr=xdis+[2p1xy+p2(r2+2x2)]
ycorr=ydis+[p1(r2+2y2)+2p2xy]

其中:

  • xdis 和 ydis 表示有畸变的坐标;
  • xcorr 和 ycorr 表示修复后的坐标;
  • k1,k2,k3 表示径向畸变参数;
  • p1,p2 表示切向畸变参数;

所以最终得到5个畸变参数:

D=(k1,k2,p1,p2,k3)

相机标定

那么可以利用这些来进行最终的任务相机标定,简单的过程可以描述为通过标定板,如下图,可以得到n个对应的世界坐标三维点 Xi 和对应的图像坐标二维点 xi,这些三维点到二维点的转换都可以通过上面提到的相机内参 K,相机外参 R 和 t,以及畸变参数 D 经过一系列的矩阵变换得到。现在就用这些对应关系来求解这些相机参数。最后就是用线性方法求解方程式,这里就不做讨论了。

那为什么要做相机标定呢? 

每个镜头的畸变程度各不相同,通过相机标定可以校正这种镜头畸变。其实可以认为用这种标定的方式来求解相机内参和畸变参数,相当于一种相机校准,然后这些参数就可以用于后面的求解。例如求解新拍的两幅图片相对的 R 和 t,求解这个外参用到就是标定得到的相机内参和畸变参数。

齐次坐标 

就是将一个原本是n维的向量用一个n+1维向量来表示。 

许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来可以表示为 x=R∗X+t(注:因为习惯的原因,实际使用时一般使用变化矩阵左乘向量)(R 旋转缩放矩阵,t 为平移矩阵,X 为原向量,x为变换后的向量)。引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为 x=P∗X的形式。即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。和上面的计算过程是对应的。

【视频开发】【计算机视觉】相机标定(Camera calibration)《二》的更多相关文章

  1. 相机标定(Camera calibration)

    简单介绍 摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程.也就是求终于的投影矩阵 P 的过程,以下相关的部分主要參考UIUC的计算机视觉的课件(网址Spr ...

  2. [zt]摄像机标定(Camera calibration)笔记

    http://www.cnblogs.com/mfryf/archive/2012/03/31/2426324.html 一 作用建立3D到2D的映射关系,一旦标定后,对于一个摄像机内部参数K(光心焦 ...

  3. Android 音视频开发(四):使用 Camera API 采集视频数据

    本文主要将的是:使用 Camera API 采集视频数据并保存到文件,分别使用 SurfaceView.TextureView 来预览 Camera 数据,取到 NV21 的数据回调. 注: 需要权限 ...

  4. 【视频开发】OpenCV中Mat,图像二维指针和CxImage类的转换

    在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转 ...

  5. 【视频开发】【计算机视觉】相机标定(Camera calibration)原理、步骤

    相机标定(Camera calibration)原理.步骤 author@jason_ql(lql0716)  http://blog.csdn.net/lql0716 在图像测量过程以及机器视觉应用 ...

  6. Android 音视频开发学习思路

    Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 初级入门篇: Android 音视频开发(一) ...

  7. Android 音视频开发(七): 音视频录制流程总结

    在前面我们学习和使用了AudioRecord.AudioTrack.Camera.MediaExtractor.MediaMuxer API.MediaCodec. 学习和使用了上述的API之后,相信 ...

  8. Camera Calibration 相机标定:原理简介(二)

    2 针孔相机模型 常见的相机标定中,使用的相机多为针孔相机(Pinhole camera),也就是大家熟知的小孔成像理论.将其中涉及的坐标系之间的相互转换抽离出来,即为针孔相机模型的核心. 上图所示的 ...

  9. Camera Calibration 相机标定:Opencv应用方法

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/49427383 Opencv中Camer ...

随机推荐

  1. contos7自启动django服务

    研究了很多种办法 1.新建一个sh 文件 vi django_autostart.sh 2.编辑文件内容 #!/bin/bash #chkconfig:345 61 61 //此行的345参数表示,在 ...

  2. 内部类不能有静态变量(除静态的对Static的理解)

    关于内部类(static与final) Static 不用实例化就能加载进内存 而内部类需要外部类实例化后才能加载进内存.这就间接造成static需要实例化了.与static不需要实例化语义矛盾 1. ...

  3. Linux 下的 mysql 自动备份

    Linux 下实现自动备份,主要就是编写好执行备份的 shell script( *.sh )文件,设好权限(可读,可执行).然后利用 Linux 定时任务 crontab 来执行备份脚本就可以了.以 ...

  4. 响应式开发 纯CSS实现隐藏菜单栏

    // 将要隐藏的菜单设置 display: block; // 然后在菜单上面设置一个点击选项,如“菜单”<label for="toggle-checkbox" id=&q ...

  5. Linux发展史与安装-Linux从入门到精通第一天(非原创)

    文章大纲 一.Linux发展史二.Linux系统的安装三.Linux系统的文件四.学习资料下载五.参考文章   一.Linux发展史 1. Linux前身-Unix 1968年 Multics项目MI ...

  6. 一个标准sql语句模板

    select distinct top n * from t1 inner join t2 on ... join t3 on ... where ... group by ... having .. ...

  7. idea 2019 集成activiti, idea activiti 新建bpmn文件, 解决idea activiti中文乱码

    idea 在线安装activiti插件 1. File-->Settings 2. 点击Plugins, 右侧界面点击Marketplace后在搜索框搜索 actiBPM 注: 网络原因没有加载 ...

  8. javascript之DOM选择符

    javascript库中最常用的一项功能,就是根据CSS选择符选择与某个模式匹配的DOM元素.实际上jQuery的核心就是通过css选择符查询DOM文档取得元素的引用,从而抛开了getElementB ...

  9. ZABBIX监控TCP连接状态

    一.获取监控数据 # /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' LISTEN ESTABLISHED T ...

  10. JavaScript中eval函数的用法

    1. eval函数会计算传给的字符串, 并把作为脚本代码来执行. eval(str) 此函数接受一个字符串作为参数,并把str当做一段JavaScript脚本代码来执行,如果str执行结果返回一个值则 ...