每一个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,  线性空间,  更直观的叫法是向量空间;