每一个Ubuntu版本 , 安装软件package时总是有一个默认的软件版本
拿boost 和opencv 来举2个例, :
Ubuntu 14.04 LTS, 软件源中默认对应的boost是1.54.0, opencv 是2.4.8
有时候我们需要装其他版本的软件;
默认的软件安装的路径大致是: 头文件: /usr/inlcude; 库文件: /usr/lib/x86_64-linux-gnu
而自己编译的软件,比如boost 1.60.0和 opencv 3.0.0, 安装路径都是/usr/local,也就是说: /usr/local/include 和 /usr/local/lib
再比如说 opencv 的 pkgconfig/opencv.pc 文件, 2.4.8的是放在 /usr/lib/x86_64-linux-gnu/pkgconfig/opencv.pc , 3.0.0是自己编译的,放在 /usr/local/lib/pkgconfig/opencv.pc
当存在两个版本的软件时, 这时就应该注意程序的编译和运行问题了
编译时: 注意头文件和库文件的搜索顺序
运行时: 注意库文件的搜索顺序,
更需要注意: 当编译时头文件用的版本和运行时用的库的版本不一致时,就出现 symbol lookup error, 多数情况下这种错误就是这个原因;
所以,不能以为你用ldd看到库引用的版本是正确的就OK,如过编译时头文件版本不对,就会有symbol lookup error;
下面来详细讨论编译和运行时头文件和库的搜索顺序:
引用: http://www.voidcn.com/article/p-audmuddb-bmq.html
#include “headfile.h”
搜索顺序为:
①先搜索当前目录
②然后搜索-I指定的目录
③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使用的是C_INCLUDE_PATH)
④最后搜索gcc的内定目录
usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include
#include <headfile.h>
①先搜索-I指定的目录
②然后搜索gcc的环境变量CPLUS_INCLUDE_PATH
③最后搜索gcc的内定目录
/usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include
也就是说, <> 和 ""的区别在于不搜索 当前目录
这里要特别注意: 在 Ubuntu 14.04上亲测: 内定目录的优先顺序是 /usr/local/include 优先于/usr/include/x86_64-linux-gnu再优先于 /usr/include, 并且不能被-I改变, 也就是说 -I后面跟个内定目录(比如"-I/usr/include")是没有效果的,
但是在编译的链接阶段,/usr/lib的优先级却又高于/usr/local/lib,并且又能通过-L来改变,这真是gcc一个蛋疼的现象;
运行时动态库的搜索路径:
动态库的搜索路径搜索的先后顺序是:
①编译目标代码时指定的动态库搜索路径(这是通过gcc 的参数"-Wl,-rpath,"指定。当指定多个动态库搜索路径时,路径之间用冒号":"分隔)
②环境变量LD_LIBRARY_PATH指定的动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)
③配置文件/etc/ld.so.conf中指定的动态库搜索路径;
④默认的动态库搜索路径/lib;
⑤默认的动态库搜索路径/usr/lib。
(应注意动态库搜寻路径并不包括当前文件夹,所以当即使可执行文件和其所需的so文件在同一文件夹,也会出现找不到so的问题,类同#include <header_file>不搜索当前目录)
这里要注意: 第一条, 运行时的搜索路径是可能由编译时候规定好的,如果找不到编译时候规定的,才按照后面的顺序查找; 目前,还没有测试过 /lib, /usr/local/lib, /usr/lib/x86_64-linux-gnu的优先顺序; 遇到的例子中,比如ROS使用的boost 1.54.0的库,都属于1的情况;
Image
Graphic
frame
通常说成品图片的时候都是image, 说Graphic通常意味着在技术层面对image内容的改动或讨论, 而frame等于image+帧号
file
path
directory
path通常值的是全路径的文件或目录, 因为本身目录也是文件; directory单指目录; file本质上包括目录,但偏向指真正的文件;
为什么加权平均可以抑制噪声?
噪声就是像素的强度相对于真值有个突变。从时域上讲,通过高斯滤波能让一个像素的强度与周围的点相关,就减小了突变的影响;从频域上讲,突变引入了高频分量,而高斯滤波器可以滤除高频分量。
取权重的已知要求:
既然每个点都要取周边像素的平均值,那么应该如何分配权重呢?
如果使用简单平均,显然不是很合理,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系越疏远 (好像只知道这个要求, 又想不出其他约束)。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。
用正态分布(高斯函数)为邻居分配权重
所以, 正态分布就成了一种可取的权重分配模式。
1, 使用 #pragma once 比使用 #ifndef #endif的方式方便
2, 命名:
比如, image, graphcic, frame, frame是带有帧id属性的
3, 不要取 std::vector 内元素的地址, 很愚蠢;
1, 线性空间, 更直观的叫法是向量空间;