OpenCV中,使用C++类的构造函数进行定义转换
OpenCV中采用了很多类似下面方式,在类的构造函数中动态进行定义转换
#include "stdafx.h"
class Mat {
public:
int val;
void init() {
val = 100;
}
};
class holder{
public:
Mat* pMat;
holder(Mat& test) {
test.val = 101;
pMat = &test;
}
};
void testholder(holder hd) {
hd.pMat->val = 200;
}
int main()
{
Mat mat;
mat.init();
testholder(mat);
return 0;
}
注意那个testholder(mat)函数,这里本来需要的是一个holder的对象,而实际我们传入了一个Mat的对象,holder在构造时,需要一个Mat对象的引用,于是定义的转换就发生了,一个新的holder的对象被构造出来,并且接收了mat作为其参数。
在OpenCV的源码中,这样的例子比比皆是,典型的如copyTo,他的定义是这样的,
void Mat::copyTo( OutputArray _dst ) const
{
。。。
}
这里要求输入的参数是一个OutputArray,而实际上,我们是这样使用copyTo的,
Mat source = imread("image.jpg", 1);
...
Mat destination;
source.copyTo(m);
...
嗯,是不是想起c++中也有大量这样预定义的类,比如string这个模板类?其实最早从C++学习编程我们就开始应用了。