libProCam笔记

Binarizer.cpp

这个部分是来计算图像的binary的,包括

  • 计算这个图片的threshold
  • 做背景substract

Cpp相关

  • 构造函数
    • 构造一个类的时候使用的函数,这个函数的名字和类名相同,默认是没有参数的,可以自己加上参数,这样创建对象的时候就需要给参数
    • 对标python里面的init
  • 析构函数
    • 名字和构造函数完全相同,但是在前面增加了一个波浪线,没有返回值也没有参数,只是用来在关闭程序的时候释放资源
  • 虚函数

    • 借助指针来达到多态的效果
    • 定义一个函数是虚函数,不代表这个函数不被实现,而是代表基类的指针可以调用子类的这个函数
    • 如果定义为纯虚函数,才说明不会实现
    • 比如下面的例子里面,B是子类,A是基类,创建的是A的指针,但是调用的却是B的函数,这说明这个函数的调用不是在编译的时候被确定的,而是在运行的时候被确定的
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      class A
      {
      public:
      virtual void foo()
      {
      cout<<"A::foo() is called"<<endl;
      }
      };
      class B:public A
      {
      public:
      void foo()
      {
      cout<<"B::foo() is called"<<endl;
      }
      };
      int main(void)
      {
      A *a = new B();
      a->foo(); // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的!
      return 0;
      }
  • 纯虚函数,在函数的定义后面加上 =0

    • 经常会在定义基类的时候用纯虚函数,因为基类可能有很多的派生,但是基类本身生成的对象可能是不合理的
      • 比如动物可以派生狮子老虎,但是动物本身不是很合理
    • 在子类里面必须重新声明这个函数,也就是说在子类的时候必须提供一个这个函数的实现,但是基类的作者不知道你怎么实现它