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