积累向的视觉小知识
本文最后更新于:2023年7月26日 晚上
没有特定的主题,遇到有啥不会的就往里补充。
1.-O1,-O2,-O3,-Os优化(gcc)
使用-Q –help =optimizers来获取每个优化标识所启用的优化选项。
解释:
- -O,-O1:
这两个命令的效果是一样的,目的都是在不影响编译速度的前提下,尽量采用一些优化算法降低代码大小和可执行代码的运行速度。
- -O2:
该优化选项会牺牲部分编译速度,除了执行-O1所执行的所有优化之外,还会采用几乎所有的目标配置支持的优化算法,用以提高目标代码的运行速度。
- -O3:
该选项除了执行-O2所有的优化选项之外,一般都是采取很多向量化算法,提高代码的并行执行程度,利用现代CPU中的流水线,Cache等。
这个选项会提高执行代码的大小,当然会降低目标代码的执行时间。
- -Os:
这个优化标识和-O3有异曲同工之妙,当然两者的目标不一样,-O3的目标是宁愿增加目标代码的大小,也要拼命的提高运行速度,但是这个选项是在-O2的基础之上,尽量的降低目标代码的大小,这对于存储容量很小的设备来说非常重要。为了降低目标代码大小,会禁用下列优化选项,一般就是压缩内存中的对齐空白(alignment padding)
- -Ofast:
该选项将不会严格遵循语言标准,除了启用所有的-O3优化选项之外,也会针对某些语言启用部分优化。如:-ffast-math
- -Og:
该标识会精心挑选部分与-g选项不冲突的优化选项,当然就能提供合理的优化水平,同时产生较好的可调试信息和对语言标准的遵循程度。
2.动态连接库(共享库)和静态连接库
1.静态链接库 *.a
将需要调用的函数统一链接到可执行文件中,成为可执行文件的一部分。
- 优点:
运行速度快(因为已经链接到可执行文件中了)
不需要重新编译代码就可以链接
(因为已经和可执行文件链接在一起了,可执行文件调用链接库时可以直接跳转) - 缺点:
占用内存,当多个程序调用相同的函数时,内存中就会存在该函数的多个备份
2.动态链接库 *.so
仅加入被调函数的描述信息,当程序执行时由运行链接加载库。
仅当被装入内存时,才开始运行。相对于静态链接库,动态链接库只会在内存中保留一份。
- 优点:不占用内存;可以实现进程之间的资源共享。
(因此动态库也称为共享库) - 缺点:速度比静态的慢
3.环境变量
- 定义:在操作系统中用来指定操作系统运行环境的一些参数,要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。
用户通过设置环境变量,来更好的运行进程。
- windows系统中的环境变量:PATH
可以直接在终端输入echo %PATH%查看系统所有的环境变量 - linux系统中的环境变量: export
可以直接在终端输入export查看系统所有的环境变量 - 暂时不管CMakeLists里面的环境变量
- linux中,添加路径到环境变量里面的方法:即,添加到.bashrc的脚本中。(也可以用vim直接编辑.bashrc内容)
1
echo export PATH="~/.aspera/connect/bin/:$PATH" >>.bashrc
.bashrc是一个配置文件,也是一个隐藏文件,存在于用户的家目录~下,需要用
ls -a
才能查看到,每次登陆bash,这个文件就会被执行一次,在文件内的代码会被运行一遍。
参考:https://cloud.tencent.com/developer/article/1457751bash: 终端的那个框
echo 输出命令
>>
表示一个类似管道的意思
4.opencv配置环境
查看UGAS的opencv配置,后面新建项目如果要使用opencv,直接将.props文件复制粘贴到项目文件夹,再在VS里面添加现有属性表
即可。
5.分辨率
分辨率只是数学上的一个概念,跟任何设备无关。
它仅仅是用来表示横向和纵向有多少个像素点而已,可以粗略理解为图片的尺寸以及清晰度。
参考:https://zhuanlan.zhihu.com/p/424498440
(分辨率?1080P、2K、4K?英寸?)
6. image distorition:图像畸变
7. oop: python面向对象编程
8. markdown怎么写下标:例如k1
9.markdown怎么表示矩阵:
$$\begin{matrix}
0&1&1\
1&1&0\
1&0&1\
\end{matrix}$$