zoukankan      html  css  js  c++  java
  • C++ 与OpenCV 学习笔记

    依赖:指针是一个变量,指向本体;引用只是一个别名(本体的另一个名字),绑定在主体上

    可变:引用只能在定义时被初始化一次,且“从一而终”;指针可以修改,“见异思迁”;

    可空:引用不能为空;指针可以为空;

    大小:sizeof 引用,得到的是所指向变量的大小;sizeof 指针,得到的是指针的大小;

    自增:指针 ++,是指指针的地址自增;引用++是指所指变量自增;

    类型:引用是类型安全的,引用过程会进行类型检查;指针不会进行安全检查;

    联合体:当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)

    1. 联合体是一种结构;

    2. 他的所有成员相对于基地址的偏移量均为0;

    3. 此结构空间要大到足够容纳最“宽”的成员;

      //但是其大小不仅仅由最宽的成员决定,还需要考虑每个成员的自身对齐方式!

    4. 其对齐方式要适合其中所有的成员。

    const作用:

    c++编译器会在编译时,把常量优化成立即数,减少内存访问。因此,能够使用const的变量(在运行过程中不会发生变化的变量),尽量使用const去修饰。

    特别是处理矩阵以及图像指针运算时。

    inline function 内联函数:

    函数调用的开销是很大的,如果有一段短小而需要频繁调用的函数,可以写为内联函数。

    也就是建议编译器在函数调用点上展开代码后再进行编译。

    这里的建议意思是,如果函数较复杂,编译器是不会内联的,即使内联了,只会让编译花费更多时间,并且很多编译器不允许递归函数的内联。

    范数:

    给定向量 x = (x1, x2, x3, ... xn)

    L1范数:向量各个元素绝对值之和,

    L2范数:向量各个元素绝对值平方求和然后平方根,

    Lp范数:向量各个元素绝对值p次方求和然后1/p次方,

    L∞ (Lc范数)范数:向量各个元素求绝对值,其中的最大值。

    指针与引用:

    指针是一个变量,存储的是另外一个变量的地址,这另外的变量的类型是指针的基类型,也就是指针指向的内存空间的类型。而指针本身占用的是一个16进制的内存空间(2个字节)。

    int a = 1;

    int* b = &a;

    void func(int* p){}

    调用:func(b);

    引用 只是变量的一个别名,相当于绰号。

    int a = 1;

    int& b = a;

    void func(int& p){}

    调用:func(b);

    *** 引用在创建时必须被初始化,因为引用不能指向空值。

    引用的作用,使用指针都能完成,为什么还要使用引用?

      因为指针比较危险,在确定只需要只用引用传递功能时,可以只使用引用。(函数调用时)

    2016-11-17 今天花了两个多小时才解决了一个问题:

    opencv的cvMat结构向eigen的Matrix结构转换时,

    需要使用opencv的 #include <opencv2/core/eigen.hpp>头文件,

    而该文件又是依赖于eigen核心库 #include <Eigen/Core>的。

    重点是在写预处理代码时,注意顺序!先包含eigen相关库,再包含opencv库!不然opencv会找不到eigen。。。。哭了

    2016-11-19

    linux目录:

    /usr 是系统级目录,相当于 C:/windows, /usr/lib 相当于 C:/windows/system32; 其中存放系统软件,例如PCL库。系统源码放在/usr/src

    /usr/local 是用户级目录,相当于C:/Program Files ;存放用户常用第三方库,例如OpenCV,g2o;

    /opt 是可选的意思,相当于D:/software, 在硬盘空间不够时,可以将其直接挂载到外部存储上,不影响使用。相当于一些硬盘版的软件。

    2016-12-06

    集合和多元组的区别:

    多元组:可重复有顺序!

    一个由C/C++编译的程序占用的内存分为以下几个部分:

     1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。

     2、堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表。malloc和new出来的空间就属于堆区。

     3、全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量放一块区域,没有初始化的在相邻的另一块区域,程序结束后由系统释放。

     4、文字常量区:常量字符串就是放在这里,程序结束后由系统释放。

     5、程序代码区:存放函数体的二进制代码。

  • 相关阅读:
    查看.Net Framework版本的方法
    SQL2008 强烈要求限制最大内存
    Winform用匿名方法新建线程的方法
    Qt编写项目作品27-多线程文件传输
    Qt编写项目作品26-一维码二维码解析及生成
    Qt编写的项目作品25-硬件综合应用(热敏打印+身份证+短信猫)
    Qt编写的项目作品24-人脸识别综合应用(在线+离线+嵌入式)
    Qt开源作品5-仪表盘交互
    Qt开源作品4-网络调试助手
    Qt开源作品3-串口调试助手
  • 原文地址:https://www.cnblogs.com/shang-slam/p/6064905.html
Copyright © 2011-2022 走看看