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