0
在计算机视觉库,基类DescriptorExtractor(用于在一个图像中从关键点提取描述符)是这样写的是:虚拟功能
class DescriptorExtractor
{
public:
virtual ~DescriptorExtractor();
void compute(const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors) const;
protected:
virtual void computeImpl(const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors) const = 0;
};
而对于不同类型的描述符,如筛的冲浪,我们从基类派生:
class SurfDescriptorExtractor : public DescriptorExtractor
{
public:
SurfDescriptorExtractor(..){..}
protected:
virtual void computeImpl(const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors) const;
SURF surf;
};
并且受保护的方法computeImpl被(重新)实现。 我写了一个新的描述符提取MyDescriptorExtractor
这需要当前图像(如他人的OpenCV)和以前的形象太像(?):
class MyDescriptorExtractor: public DescriptorExtractor
{
public:
...
protected:
virtual void computeImpl(const Mat& image, const Mat& prev_image, vector<KeyPoint>& keypoints, Mat& descriptors) const;
}
我希望这个新类是使用DescriptorExtractor
作为参数OpenCV的方法兼容。做这个的最好方式是什么 ?问题是,基类方法compute
不会有相同的签名......
感谢
我想象一下'MyDescriptorExtractor'的方法叫'keepHistory'必须运行。无论如何,我觉得这些选项有点脏... – Eric 2012-03-07 15:46:45