Skip to content

Commit a0d8bbb

Browse files
committed
update
1 parent ac82bfd commit a0d8bbb

6 files changed

Lines changed: 148 additions & 1 deletion

File tree

JavaKnowledge/UML类图.pdf

530 KB
Binary file not shown.

VideoDevelopment/FFmpeg/5.FFmpeg核心功能.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ AVCodecContext 中有两个成员:AVCodec,AVFrame。
7575
- AVFrame 中主要包饭了编码后的帧信息。
7676
```
7777
typedef struct AVFrame {
78-
FF_COMMON_FRAME
78+
FF_COMMON_FRAME
7979
} AVFrame;
8080
```
8181
其中FF_COMMON_FRAME 是以宏出现的,由于编码过程中AVFrame 中的数据是要经常存取

VideoDevelopment/OpenCV/1.OpenCV简介.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支
4545
API:
4646
- imread(..url...):加载本地图像
4747
默认的BGR 彩色图像加载方式,此外支持灰度图像和任意格式。注意:在OpenCV中颜色值写法是BGR,而不是RGB。
48+
imread() 函数默认加载图像文件,加载进来的是3 通道彩色图像,色彩空间是RGB 色彩空间。
49+
通道顺序是:BGR (蓝色、绿色、红色)。
50+
通道分离函数:split()
51+
通道合并函数:merge()
4852
- imshow("namexx", ...url...):显示图像
4953
- getStructuringElement(...):获取腐蚀的内核矩阵
5054
- erode(...):腐蚀(源图像、目的图像、内核矩阵)
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
2.卷积
2+
===
3+
4+
5+
### 数字信号处理中卷积
6+
7+
卷积一词最开始出现在信号与线性系统中,信号与线性系统中讨论的就是信号经过一个
8+
线性系统以后发生的变化。由于现实情况中常常是一个信号前一时刻的输出影响着这一时刻
9+
的输出,所在一般利用系统的单位响应与系统的输入求卷积,以求得系统的输出信号(当然
10+
要求这个系统是线性时不变的)。
11+
卷积的定义:
12+
卷积是两个变量在某范围内相乘后求和的结果。
13+
14+
### 数字图像处理中卷积
15+
16+
数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模
17+
板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有
18+
相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值,并最终滑动完所有图像的
19+
过程。
20+
21+
22+
我们经常能看到的,平滑,模糊,去燥,锐化,边缘提取等等工作,其实都可以通过
23+
卷积操作来完成
24+
25+
### 模糊原理:
26+
27+
1. 是拿一个矩阵(3X3, 5X5)等,和原图从左向右从上到下分别进行卷积,将卷
28+
积值最后赋值个当前卷积的中心像素。
29+
2. 那么其最关键的参数,也就在于矩阵的大小和矩阵的值,我们通常称矩阵为卷积核。
30+
3. 模糊操作的重要原因之一也是为了给图像预处理时降低噪声。
31+
32+
33+
### 均值模糊:
34+
也称为均值滤波,相当于卷积核的矩阵值全部为1/(卷积SIZE),
35+
本次要记录的是图像的三种基本模糊操作:均值模糊、高斯模糊和中值模糊。
36+
37+
均值模糊的原理是通过一个卷积核,在图像上进行移动,对每次覆盖的像素范围进行求
38+
平均值,然后将求得的平均值赋值给当前卷积核中心位置处的像素点。经过卷积核对一整幅
39+
图像的多次平移,就得到了一幅均值模糊过后的图像,该图像上的每个像素点的值,都是其
40+
邻域内所有像素点的平均值。均值模糊能够抹除图像的边缘和细节,对噪声也有一定的抑
41+
制作用,但是它作为一种最最最基础的模糊操作,实现简单的同时,其效果也是麻麻嘚。
42+
43+
高斯模糊和均值模糊其原理上的唯一区别只是在于卷积核的值不同罢了,高斯卷积核矩
44+
阵值服从二维高斯函数,也就是说一个图像与服从二维高斯分布的函数做卷积,由于高斯函
45+
数是连续的,所有要将二维高斯函数进行采样和离散化,最后得到服从高斯函数规律的卷积
46+
核矩阵。
47+
48+
高斯模糊也是一种基本的模糊操作,和均值模糊不同的是,高斯模糊是对某一像素点的邻域
49+
内所有像素点进行加权求和,能够比较好的保留中心像素点对图像的影响。高斯模糊的效果
50+
相比起均值模糊,要更好一些,而且在抑制噪声方面的能力也更强,尤其是对于高斯噪声的
51+
抑制效果比较好。
52+
53+
54+
55+
56+
57+
### 锐化的概念
58+
图像锐化的目的是使模糊的图像变得清晰起来,主要用于增强图像的灰度跳变部分,
59+
这一点与图像平滑对灰度跳变的抑制正好相反。而且从算子可以看出来,平滑是基于对图像
60+
邻域的加权求和或者说积分运算的,而锐化则是通过其逆运算导数(梯度)或者说有限差分
61+
来实现的。
62+
图像的卷积计算除了可以完成我们前面介绍的模糊去噪、边缘检测等任务外,还可以
63+
实现图像锐化/增强的功能。
64+
图像锐化是一种突出和加强图像中景物的边缘和轮廓的技术。
65+
在图像中,边缘可以看作是位于一阶导数较大的像素位置,因此可以通过求图像的一阶
66+
导数来加强图像的边缘。同样我们也可以通过求图像的二阶导数来完成图像锐化。
67+
一般也通过Laplacian 滤波加原图权重像素叠加,
68+
69+
70+
71+
72+
73+
74+
75+
76+
77+
78+
79+
80+
81+
82+
83+
---
84+
85+
- 邮箱 :charon.chui@gmail.com
86+
- Good Luck!

VideoDevelopment/视频封装格式/MP4格式详解.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,59 @@ mvhd定义了整个movie的特性,通常包含媒体无关的信息,例如
9696
**普通MP4文件播放时,ftyp与moov box需同时加载完成后,并下载部分mdat box的帧数据后,才能开始播放**。 那对于一些长视频,确实存在文件头过大,从而影响第一帧的加载速度问题。 另外,对于不是很规范的文件,例 `mp4视频文件举例`中moov box基本在文件最后的的MP4文件,还有可能存在视频文件基本下载完成后才能播放的问题。
9797

9898

99+
### ES
100+
101+
ES:Elementary Streams (原始流)是直接从编码器出来的数据流,可以是编码过的视
102+
频数据流(H.264,MJPEG 等),音频数据流(AAC、AC3、MP3),或其他编码数据流的统称。
103+
ES 流经过PES 打包器之后,被转换成PES 包。
104+
105+
ES 是只包含一种内容的数据流,如只含视频或只含音频等,打包之后的PES 也是只含
106+
一种性质的ES,如只含视频ES 的PES,只含音频ES 的PES 等。
107+
每个ES 都由若干个存取单元(AU:Access Unit)组成,每个视频AU 或音频AU 都是由
108+
头部和编码数据两部分组成,1 个AU 相当于编码的1 幅视频图像或1 个音频帧,也可以说,
109+
每个AU 实际上是编码数据流的显示单元,即相当于解码的1 幅视频图像或1 个音频帧的取
110+
样。
111+
112+
113+
### PES
114+
PES:Packetized Elementary Streams (分组的ES),ES 形成的分组称为PES 分组,是用
115+
来传递ES 的一种数据结构。PES 流是ES 流经过PES 打包器处理后形成的数据流,在这个过
116+
程中完成了将ES 流分组、打包、加入包头信息等操作(对ES 流的第一次打包)。
117+
PES 流的基本单位是PES 包。PES 包由包头和payload 组成。
118+
119+
120+
### PTS、DTS
121+
PTS:PresentationTime Stamp(显示时间标记)表示显示单元出现在系统目标解码器
122+
(H.264、MJPEG 等)的时间。
123+
DTS:Decoding Time Stamp(解码时间标记)表示将存取单元全部字节从解码缓存器移走
124+
的时间。
125+
PTS/DTS 是打在PES 包的包头里面的,这两个参数是解决音视频同步显示,防止解码器
126+
输入缓存上溢或下溢的关键。每一个I(关键帧)、P(预测帧)、B(双向预测帧)帧的
127+
包头都有一个PTS 和DTS,但PTS 与DTS 对于B 帧不一样,无需标出B 帧的DTS,对于I 帧
128+
和P 帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再
129+
显示,所以一定要分别标明PTS 和DTS。
130+
131+
### PS
132+
PS:Program Stream(节目流)PS 流由PS 包组成,而一个PS 包又由若干个PES 包组成(到
133+
这里,ES 经过了两层的封装)。
134+
PS 包的包头中包含了同步信息与时钟恢复信息。
135+
一个PS 包最多可包含具有同一时钟基准的16 个视频PES 包和32 个音频PES 包。
136+
137+
### TS
138+
TS:Transport Stream(传输流)由定长的TS 包组成(188 字节),而TS 包是对PES 包
139+
的一个重新封装(到这里,ES 也经过了两层的封装)。PES 包的包头信息依然存在于TS 包
140+
中。
141+
142+
TS 流与PS 流的区别在于TS 流的包结构是固定长度的,而PS 流的包结构是可变长度的。
143+
PS 包由于长度是变化的,一旦丢失某一PS 包的同步信息,接收机就会进入失步状态,从而
144+
导致严重的信息丢失事件。
145+
而TS 码流由于采用了固定长度的包结构,当传输误码破坏了某一TS 包的同步信息时,接
146+
收机可在固定的位置检测它后面包中的同步信息,从而恢复同步,避免了信息丢失。因此在信
147+
道环境较为恶劣、传输误码较高时一般采用TS 码流,而在信环境较好、传输误码较低时一般
148+
采用PS 码流。
149+
150+
151+
99152

100153

101154

VideoDevelopment/视频封装格式/TS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ PCR是节目时钟参考,PCR、DTS、PTS都是对同一个系统时钟的采
5151

5252
视频流和音频流都需要加adaptation field,通常加在一个帧的第一个ts包和最后一个ts包里,中间的ts包不加。
5353

54+
55+
56+
57+
5458
#### 3. TS Payload
5559

5660
TS包中Payload所传输的信息包括两种类型:视频、音频的PES包以及辅助数据;节目专用信息PSI。

0 commit comments

Comments
 (0)