我有一堆不同的Feature
类来计算图像特征。
我必须从这些类中提取“关键特征”,这些“关键特征”将打包在一起作为搜索键。
我还将存储部分Feature
课程。我不能存储整个要素类,因为那样效率很低。
现在,我想到的是编写一个Stored_features
将“关键特性”放在一起的类。
我的布局是:
Facial_features
| | |
| V |
| .---Feature1 V <|-- Abstract_feature
| | .---Feature2 <|---'
V V V
Stored_features
我的问题是这样的Stored_features
类会有很多 getter 和 setter,据我所知,getter 和 setter 表示设计不好。有没有一种易于维护的方法来避免这里有太多的 getter 和 setter?
关键是我看到我的代码在这里与这个布局非常紧密地结合在一起:(
编辑:
我的代码按要求提取。
#include <opencv2/core/core.hpp>
class Abstract_feature{
public:
virtual void calculate()=0;
virtual void draw(cv::Mat& canvas)=0;
/// to put values into Stored_features
virtual void registrate_key_values(Stored_features&) const=0;
};
class Facial_features : Abstract_feature{
public:
virtual void calculate()
{
es.calculate; sc.calculate;
/*etc but iterating over a list of Abstract_feature's*/
}
Stored_features get_stored_features() const
{
return sf.clone();
}
private:
Stored_features sf;
Head_size es;
Skin_color sc;
};
class Head_size : public Abstract_feature{
//you can guess the impl.
};
class Stored_features{
public:
typedef enum{SKIN_COLOR=0, HEAD_SIZE_WIDTH,HEAD_SIZE_HEIGHT} Name;
public:
void set_key_feature(Name, double value);
cv::Mat get_feature_vector() const {return key_values;}
private:
cv::Mat key_values;
// and here would come other features eg.
cv::Rect head_roi; // I don't search based on these. (So I should not use getters/setters?)
};
添加了 opencv 因为它无论如何都是一个基于 opencv 的项目。