c++ 散乱学习之关键字
c++ 中基础语法
public 和 private
分为成员变量成员函数的和继承。
对于变量和函数来说:
public是类的成员函数,类的实例变量都可访问;private是类的实例变量不能访问,但是优元函数,变量可以访问。
对于继承来说:
派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员。(意思就是无法直接修改基类的private变量)
派生类的实例变量,可以访问基类的public成员,但是无法访问protected、private成员。
在我们的class attentionlight里,所有变量都是private的,不需要外部修改访问。细节实现逻辑函数都是private,不需要暴露。new 函数 set函数 transform函数是public的。外部接口调用。
static
https://blog.csdn.net/hhg337372083/article/details/89213878
static修饰变量
只初始化一次,在运行前就初始化了。生命周期是程序运行结束才释放的。
被 static 修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要 new 出一个类来,
类中static 变量独立于类的任意一个对象,其值修改被类的所有对象看到
static数据成员必须在类定义的外部定义,通常放在包含类的非内联成员函数定义的文件中。
但是也有例外,const static 数据成员可以在类的定义体中进行初始化,因为const定义时必须初始化。
static修饰函数
static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用
被 static 修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要 new 出一个类来
“ 为什么 ”static成员函数由于不与任何对象关联,因此它不具备this指针,因此,它无法访问属于类对象的非静态数据成员,也无法访问
非静态成员函数。也就是说,类的静态成员函数,只能调用该类的其它静态成员函数和静态数据成员。 但是在我们的工程里面有 static New呢
http://legendtkl.com/2014/09/30/cplusplus-static-and-virtual/
const
限定变量为不可修改。
限定成员函数不可以修改任何数据成员。
const与指针:
const char *p 表示 指向的内容不能改变 ; char * const p,就是将P声明为常指针,它的地址不能改变,是固定的,但是它的内容可以改变。
https://blog.csdn.net/shihuboke/article/details/79286669
virtual
感觉是方便子类进行多态的
override
https://blog.csdn.net/i_chaoren/article/details/77281785
防止子类在继承时,没有重写覆盖父类函数。仅在成员函数声明之后使用时才是区分上下文的且具有特殊含义;否则,它不是保留的关键字。使用 override 有助于防止代码中出现意外的继承行为。
typename
install asitop
install asitop 但是找不到
pip3 install asitop
安装成功了,但是显示
1 | Installing collected packages: asitop |
然后无法运行asitop which whereis都找不到
需要添加环境变量
1 | echo -e 'export PATH="$PATH:/Users/PeppaZhu/Library/Python/3.9/bin"' >> $HOME/.bash_profile |
然后就可以了
然后下次打开咋又不行了呢
需要source ~/.bash_profile 使得环境变量生效
YUV storage
令人迷惑的YUV存储模式
奇怪的知识增加了
除YUV之外,经常提到的还有 YPbPr 和 YCbCr。YPbPr 指模拟分量信号(或接口),P(Parallel)表示并行,b 下标表示蓝,r 下标表示红。YCbCr 指的是数字分量信号(或接口),C(Chroma)表示色度。YCbCr 还可指色彩空间,YCbCr 色彩空间是 YUV 色彩空间的缩放和偏移版本。
YUV采样方式
主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0。这些采样方式,不压缩 Y 分量,对 UV 分量的压缩程度不同。
YUV存储方式
存储模式分成三大类:
packed:将 Y、U、V 分量交织存放在一起,和 RGB 的存放方式类似。内存中排列形式类似:YVYUYVYUYVYUYVYU…。在具体的存储模式命名中,packed 格式不带后缀 P。
planar:将 Y、U、V 的三个分量分别存放在不同的矩阵(平面)中。内存中排列形式类似:YYYYYY…,UUUUUU…,VVVVVV…。在具体的存储模式命名中,planar 格式带后缀 P。
semi-planar:将 Y、U、V 三个分量放在两个矩阵(平面)中。Y 占用一个平面,UV 共用一个平面。内存中排列形式类似:YYYYYY…,UVUVUV…。在具体的存储模式命名中,semi-planar 格式带后缀 SP。
存储方式加上采样方式
https://developer.aliyun.com/article/782082
其中有些常用的
semi-planar 存储模式 YUV420SP
NV12:
1 | Y Y Y Y |
NV21:
1 | Y Y Y Y |
planar 存储模式 YUV420P
YU12/IYUV/I420:
1 | Y Y Y Y |
YV12:
1 | Y Y Y Y |
一段读取YUV420数据的代码
1 | class VideoCaptureYUV: |
ffmpeg record
深海巨坑ffmpeg的使用记录
服务器上安装
apt install ffmpeg
将多帧图像合成视频
ffmpeg -r 30 -i output_video/%05d.jpg -vcodec libx264 -vf zscale=matrix=709:r=full output_video_fullr.mp4
-vf zscale=matrix=709:r=limited负责转换色域,否则默认转出来是BT.601之类的SD标准。显式指定limited 色域很多种,limited显得饱和度高一些,full色域大,同样数据显得饱和度低一些
这个链接 https://fireattack.github.io/blog/2018/07/03/ffmpeg-commands.html
编码质量控制: -c:v libx264 -preset veryslow -crf 0
将yuv视频分png
ffmpeg -s 1080x720 -pix_fmt yuv420p -i dst_1080x720_30Hz_P420.yuv -vf scale=in_range=full:out_range=full output_ori/%05d.png
-vf scale=in_range=full:out_range=full 来控制色彩
这个链接 https://www.bilibili.com/read/cv6601959/
截取视频片段
按照时间截取
ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:00:00 -to 00:00:05 cutout.mp4 -y
按照帧截取
ffmpeg -i input.mp4 -vf”select=between(n,20,200)” -y -acodec copy cutout.mp4
将YUV转成MP4
ffmpeg -s 640x480 -pix_fmt yuv420p -i output.yuv out3.mp4
将MP4转YUV
ffmpeg -i input.mp4 -s 640x480 -pix_fmt yuv420p output.yuv
视频分帧
ffmpeg -i backlit.mp4 -r 30 backlit/%05d.png
如果改成jpg会有严重压缩
如果转化成png还有压缩的话,可以先将mp4转成yuv, yuv单帧的质量也就是图片单帧能达到的最高质量。然后将yuv视频转化成图像。
将视频拼接
ffmpeg -i peppa_v3_fullr.mp4 -i peppa_v5_fullr_.mp4 -filter_complex "[0:v]pad=iw*2:ih*1[a];[a][1:v]overlay=w" compair_peppa_v3v5.mp4
这个链接 https://blog.csdn.net/Gary__123456/article/details/88742705
转封装
ffmpeg -i xx.mov c:v copy xx.mp4
视频resize
ffmpeg -i testbanding.mp4 -s 1280:720 -aspect “16:9” testbanding_1280x720.mp4
一张图片转视频
ffmpeg -r 10 -f image2 -loop 1 -i 1.jpg -s 1080x1920 -pix_fmt yuvj420p -t 4 -vcodec libx264 1.mp4
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick Start
Create a new post
1 | $ hexo new "My New Post" |
More info: Writing
Run server
1 | $ hexo server |
More info: Server
Generate static files
1 | $ hexo generate |
More info: Generating
Deploy to remote sites
1 | $ hexo deploy |
More info: Deployment